binutils-gdb.git
4 years agoAvoid stringop-truncation errors
Tom Tromey [Fri, 20 Mar 2020 13:30:13 +0000 (07:30 -0600)]
Avoid stringop-truncation errors

I configured with -fsanitize=address and built gdb.  linux-tdep.c and
ada-tasks.c failed to build due to some stringop-truncation errors,
e.g.:

In function ‘char* strncpy(char*, const char*, size_t)’,
    inlined from ‘int linux_fill_prpsinfo(elf_internal_linux_prpsinfo*)’ at ../../binutils-gdb/gdb/linux-tdep.c:1742:11,
    inlined from ‘char* linux_make_corefile_notes(gdbarch*, bfd*, int*)’ at ../../binutils-gdb/gdb/linux-tdep.c:1878:27:
/usr/include/bits/string_fortified.h:106:34: error: ‘char* __builtin_strncpy(char*, const char*, long unsigned int)’ specified bound 81 equals destination size [-Werror=stringop-truncation]

This patch fixes the problem by using "sizeof - 1" in the call to
strndup, as recommended in the GCC manual.  This doesn't make a
difference here because the next line, in all cases, sets the final
element to '\0' anyway.

gdb/ChangeLog
2020-03-20  Tom Tromey  <tromey@adacore.com>

* ada-tasks.c (read_atcb): Use smaller length in strncpy call.
* linux-tdep.c (linux_fill_prpsinfo): Use smaller length in
strncpy call.

4 years agoFix column alignment in "maint info line-table"
Tom Tromey [Fri, 20 Mar 2020 13:15:08 +0000 (07:15 -0600)]
Fix column alignment in "maint info line-table"

Andrew Burgess pointed out on irc that "maint info line-table" doesn't
properly align the table headers.  This patch fixes the problem by
switching the table to use ui-out.

This required a small tweak to one test case, as ui-out will pad a
field using spaces, even at the end of a line.

gdb/ChangeLog
2020-03-20  Tom Tromey  <tromey@adacore.com>

* symmisc.c (maintenance_print_one_line_table): Use ui_out.

gdb/testsuite/ChangeLog
2020-03-20  Tom Tromey  <tromey@adacore.com>

* gdb.dwarf2/dw2-ranges-base.exp: Update regular expressions.

4 years agoFix Ada val_print removal regression
Tom Tromey [Fri, 20 Mar 2020 14:24:16 +0000 (08:24 -0600)]
Fix Ada val_print removal regression

The removal of val_print caused a regression in the Ada code.  In one
scenario, a variant type would not be properly printed, because the
address of a component was lost.  This patch fixes the bug by changing
this API to be value-based.  This is cleaner and fixes the bug as a
side effect.

gdb/ChangeLog
2020-03-20  Tom Tromey  <tromey@adacore.com>

* ada-valprint.c (print_variant_part): Remove parameters; switch
to value-based API.
(print_field_values): Likewise.
(ada_val_print_struct_union): Likewise.
(ada_value_print_1): Update.

gdb/testsuite/ChangeLog
2020-03-20  Tom Tromey  <tromey@adacore.com>

* gdb.ada/sub_variant/subv.adb: New file.
* gdb.ada/sub_variant.exp: New file.

4 years agoInherit ppc_nbsd_nat_target from nbsd_nat_target
Kamil Rytarowski [Thu, 19 Mar 2020 13:52:57 +0000 (14:52 +0100)]
Inherit ppc_nbsd_nat_target from nbsd_nat_target

gdb/ChangeLog:

* ppc-nbsd-nat.c (ppc_nbsd_nat_target): Inherit from
nbsd_nat_target instead of inf_ptrace_target.
* ppc-nbsd-nat.c: Include "nbsd-nat.h", as we are now using
nbsd_nat_target.

4 years agoAdd support for NetBSD threads in hppa-nbsd-nat.c
Kamil Rytarowski [Thu, 19 Mar 2020 14:39:56 +0000 (15:39 +0100)]
Add support for NetBSD threads in hppa-nbsd-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

gdb/ChangeLog:

* hppa-nbsd-nat.c (fetch_registers): New variable lwp and pass
it to the ptrace call.
* (store_registers): Likewise.

4 years ago[gdb/testsuite] Fix timeouts in gdb.threads/step-over-*.exp
Tom de Vries [Fri, 20 Mar 2020 13:59:01 +0000 (14:59 +0100)]
[gdb/testsuite] Fix timeouts in gdb.threads/step-over-*.exp

When running test-cases gdb.threads/step-over-lands-on-breakpoint.exp and
gdb.threads/step-over-trips-on-watchpoint.exp with target board
unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects, we run into timeouts
due not being able to set a breakpoint and then trying to continue to that
breakpoint.

In total, we run into 186 timeouts, which roughly corresponds to half an hour:
...
$ grep "FAIL.*(timeout)" gdb.sum \
  | awk '{print $2}' \
  | sort \
  | uniq -c
     66 gdb.threads/step-over-lands-on-breakpoint.exp:
    120 gdb.threads/step-over-trips-on-watchpoint.exp:
...

Fix this by bailing out if the first break fails.

Tested on x86_64-linux, both with native and with target board mentioned above.

gdb/testsuite/ChangeLog:

2020-03-20  Tom de Vries  <tdevries@suse.de>

* gdb.threads/step-over-lands-on-breakpoint.exp (do_test): Bail out if
first break fails.
* gdb.threads/step-over-trips-on-watchpoint.exp: (do_test): Same.

4 years agoAdd support for the xdef and xref pseudo-ops to the Z80 assembler.
Sergey Belyashov [Fri, 20 Mar 2020 13:53:02 +0000 (13:53 +0000)]
Add support for the xdef and xref pseudo-ops to the Z80 assembler.

PR 25690
* config/tc-z80.c (md_pseudo_table): Add xdef anf xref pseudo ops.
* doc/c-z80.texi: Update documentation.

4 years agoAdd support for NetBSD threads in ppc-nbsd-nat.c
Kamil Rytarowski [Thu, 19 Mar 2020 14:01:27 +0000 (15:01 +0100)]
Add support for NetBSD threads in ppc-nbsd-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

gdb/ChangeLog:

* ppc-nbsd-nat.c (fetch_registers): New variable lwp and pass
        it to the ptrace call.
        * (store_registers): Likewise.

4 years agoFix compile time warnings about the possibility of using uninitialised fields in...
Nick Clifton [Fri, 20 Mar 2020 11:33:07 +0000 (11:33 +0000)]
Fix compile time warnings about the possibility of using uninitialised fields in the Elf_Internal_Chdr structure when building readelf.

* readelf.c (get_compression_header): Add ATTRIBUTE_WARN_UNUSED_RESULT.
(process_section_headers): Check the return value from
get_compression_header.
(dump_section_as_strings): Likewise.
(dump_section_as_bytes): Likewise.
(load_specific_debug_section): Likewise.

4 years agoplugin: Don't invoke LTO-wrapper
H.J. Lu [Fri, 20 Mar 2020 10:55:17 +0000 (03:55 -0700)]
plugin: Don't invoke LTO-wrapper

Don't invoke LTO-wrapper since the LTO wrapper approach is not only
slow but also unreliable.  For GCC 10 or newer, LDPT_ADD_SYMBOLS_V2
will be used.

bfd/

* configure.ac (HAVE_EXECUTABLE_SUFFIX): Removed.
(EXECUTABLE_SUFFIX): Likewise.
* config.in: Regenerated.
* configure: Likewise.
* plugin.c (bfd_plugin_close_and_cleanup): Defined as
_bfd_generic_close_and_cleanup.
(plugin_list_entry): Remove resolution_file, resolution_option,
real_bfd, real_nsyms, real_syms, lto_nsyms, lto_syms, gcc,
lto_wrapper, gcc_env and initialized,
(need_lto_wrapper_p): Removed.
(get_lto_wrapper): Likewise.
(setup_lto_wrapper_env): Likewise.
(register_all_symbols_read): Likewise.
(egister_cleanup): Likewise.
(get_symbols): Likewise.
(add_input_file): Likewise.
(bfd_plugin_set_program_name): Remove need_lto_wrapper.
(add_symbols): Updated.
(try_claim): Likewise.
(try_load_plugin): Likewise.
(bfd_plugin_canonicalize_symtab): Likewise.
* plugin.h (bfd_plugin_set_program_name): Remove int argument.
(plugin_data_struct): Remove real_bfd, real_nsyms and real_syms.

binutils/

* ar.c (main): Update bfd_plugin_set_program_name call.
* nm.c (main): Likewise.

ld/

* testsuite/ld-plugin/lto.exp (lto_link_tests): Run PR ld/25355
test only for GCC 10 or newer.

4 years agoplugin: Use LDPT_ADD_SYMBOLS_V2 to get symbol type
H.J. Lu [Fri, 20 Mar 2020 04:00:19 +0000 (21:00 -0700)]
plugin: Use LDPT_ADD_SYMBOLS_V2 to get symbol type

Since LTO plugin may generate more than one ltrans.o file from one input
IR object as LTO wrapper ignores -flto-partition=none:

lto-wrapper.c:608:

   604          /* Drop arguments that we want to take from the link line.  */
   605          case OPT_flto_:
   606          case OPT_flto:
   607          case OPT_flto_partition_:
   608            continue;

the LTO wrapper approach is not only slow but also unreliable.  Since
the LTO plugin API has been extended to add LDPT_ADD_SYMBOLS_V2 with
symbol type and section kind, we can use LDPT_ADD_SYMBOLS_V2 to get
symbol type, instead of invoking the LTO wrapper.

PR binutils/25640
* plugin.c (plugin_list_entry): Add has_symbol_type.
(add_symbols_v2): New function.
(bfd_plugin_open_input): Don't invoke LTO wrapper if LTO plugin
provides symbol type.
(try_load_plugin): Add LDPT_ADD_SYMBOLS_V2.
(bfd_plugin_canonicalize_symtab): Use LTO plugin symbol type if
available.

4 years agoSilence warnings due to plugin API change
Alan Modra [Fri, 20 Mar 2020 02:27:42 +0000 (12:57 +1030)]
Silence warnings due to plugin API change

* testplug.c (parse_symdefstr): Use %hhi to read sym->def, and
clear new fields.
* testplug2.c (parse_symdefstr): Likewise.
* testplug3.c (parse_symdefstr): Likewise.
* testplug4.c (parse_symdefstr): Likewise.

4 years agoXCOFF uninitialized read
Alan Modra [Fri, 20 Mar 2020 00:27:38 +0000 (10:57 +1030)]
XCOFF uninitialized read

* coff-rs6000.c (_bfd_xcoff_slurp_armap): Ensure size is large
enough to read number of symbols.

4 years agometag uninitialized memory read
Alan Modra [Fri, 20 Mar 2020 00:25:58 +0000 (10:55 +1030)]
metag uninitialized memory read

* metag-dis.c (print_insn_metag): Don't ignore status from
read_memory_func.

4 years agoNDS32 disassembly of odd sized sections
Alan Modra [Fri, 20 Mar 2020 00:21:14 +0000 (10:51 +1030)]
NDS32 disassembly of odd sized sections

* nds32-dis.c (print_insn_nds32): Remove unnecessary casts.
Initialize parts of buffer not written when handling a possible
2-byte insn at end of section.  Don't attempt decoding of such
an insn by the 4-byte machinery.

4 years agoPowerPC disassembly of odd sized sections
Alan Modra [Thu, 19 Mar 2020 23:46:28 +0000 (10:16 +1030)]
PowerPC disassembly of odd sized sections

We shouldn't really decode a 2-byte left-over at the end of a section
as if the section contains two more bytes of zeros.  Not that it
matters very much, but this patch tidies the corner case.

* ppc-dis.c (print_insn_powerpc): Only clear needed bytes of
partially filled buffer.  Prevent lookup of 4-byte insns when
only VLE 2-byte insns are possible due to section size.  Print
".word" rather than ".long" for 2-byte leftovers.

4 years agotidy elf_backend calls
Alan Modra [Tue, 17 Mar 2020 21:01:47 +0000 (07:31 +1030)]
tidy elf_backend calls

Function pointers in elfNN_bed that are initialized by elfxx-target.h
to non-zero values generally don't need a non-NULL test before calling
them.  Targets don't set a non-NULL function to NULL.  The one
exception being elfnn-ia64.c and that exception is removed here.

* elf.c (_bfd_elf_setup_sections): Don't test known non-NULL
backend functions for NULL before calling.
(copy_special_section_fields, _bfd_elf_copy_private_bfd_data),
(bfd_section_from_shdr, assign_section_numbers): Likewise.
* elfcode.h (elf_write_relocs, elf_slurp_reloc_table): Likewise.
* elfnn-ia64.c (ignore_errors): New function.
(elf_backend_link_order_error_handler): Redefine as ignore_errors.

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 20 Mar 2020 00:00:14 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoAdd support for --no-rosegment option.
Fangrui Song [Thu, 19 Mar 2020 22:54:20 +0000 (15:54 -0700)]
Add support for --no-rosegment option.

gold/
    * options.h (General_options): Add --no-rosegment option.

4 years agoDisable get_ptrace_pid for NetBSD
Kamil Rytarowski [Tue, 17 Mar 2020 16:57:14 +0000 (17:57 +0100)]
Disable get_ptrace_pid for NetBSD

Unlike most other Operating Systems, NetBSD tracks both pid and lwp.
The process id on NetBSD is stored always in the pid field of ptid.

gdb/ChangeLog:

* inf-ptrace.h: Disable get_ptrace_pid on NetBSD.
* inf-ptrace.c: Likewise.
* (gdb_ptrace): Add.
* (inf_ptrace_target::resume): Update.
* (inf_ptrace_target::xfer_partial): Likewise.
* (inf_ptrace_peek_poke): Change argument `pid' to `ptid'.
* (inf_ptrace_peek_poke): Update.

4 years agoFix discrepancies in nm's --line-number output by adding support for the DW_AT_specif...
Nick Clifton [Thu, 19 Mar 2020 16:55:13 +0000 (16:55 +0000)]
Fix discrepancies in nm's --line-number output by adding support for the DW_AT_specification DWARF Attttribute.

PR 25676
bfd * dwarf2.c (struct varinfo): Add unit_offset field to record the
location of the varinfo in the unit's debug info data.  Change the
type of the stack field to a boolean.
(lookup_var_by_offset): New function.  Returns the varinfo
structure for the variable described at the given offset in the
unit's debug info.
(scan_unit_for_symbols): Add support for variables which have the
DW_AT_specification attribute.

binutils* testsuite/binutils-all/dw4.s: New test source file.
* testsuite/binutils-all/nm.exp: Run the new test.

4 years agoInclude: Sync lto-symtab.h and plugin-api.h with GCC
Martin Liska [Thu, 19 Mar 2020 15:55:59 +0000 (16:55 +0100)]
Include: Sync lto-symtab.h and plugin-api.h with GCC

2020-03-19  Martin Liska  <mliska@suse.cz>

* lto-symtab.h (enum gcc_plugin_symbol_type): New.
(enum gcc_plugin_symbol_section_kind): Likewise.

2020-03-19  Martin Liska  <mliska@suse.cz>

* plugin-api.h (struct ld_plugin_symbol): Split
int def into 4 char fields.
(enum ld_plugin_symbol_type): New.
(enum ld_plugin_symbol_section_kind): New.
(enum ld_plugin_tag): Add LDPT_ADD_SYMBOLS_V2.

4 years ago[AArch64] When unavailable, fetch VG from ptrace.
Luis Machado [Mon, 16 Mar 2020 17:09:25 +0000 (14:09 -0300)]
[AArch64] When unavailable, fetch VG from ptrace.

I was doing some SVE tests on system QEMU and noticed quite a few failures
related to inferior function calls. Any attempt to do an inferior function
call would result in the following:

Unable to set VG register.: Success.

This happens because, after an inferior function call, GDB attempts to restore
the regcache state and updates the SVE register in order. Since the Z registers
show up before the VG register, VG is still INVALID by the time the first Z
register is being updated. So when executing the following code in
aarch64_sve_set_vq:

if (reg_buf->get_register_status (AARCH64_SVE_VG_REGNUM) != REG_VALID)
  return false;

By returning false, we signal something is wrong, then we get to this:

  /* First store vector length to the thread.  This is done first to ensure the
     ptrace buffers read from the kernel are the correct size.  */
  if (!aarch64_sve_set_vq (tid, regcache))
    perror_with_name (_("Unable to set VG register."));

Ideally we'd always have a valid VG before attempting to set the Z registers,
but in this case the ordering of registers doesn't make that possible.

I considered reordering the registers to put VG before the Z registers, like
the DWARF numbering, but that would break backwards compatibility with
existing implementations. Also, the Z register numbering is pinned to the V
registers, and adding VG before Z would create a gap for non-SVE targets,
since we wouldn't be able to undefine VG for non-SVE targets.

As a compromise, it seems we can safely fetch the VG register value from
ptrace. The value in the kernel is likely the updated value anyway.

This patch fixed all the failures i saw in the testsuite and caused no further
regressions.

gdb/ChangeLog:

2020-03-19  Luis Machado  <luis.machado@linaro.org>

* nat/aarch64-sve-linux-ptrace.c (aarch64_sve_set_vq): If vg is not
valid, fetch vg value from ptrace.

4 years agoFix assertion failure in the BFD library when called to parse a file containing corru...
Nick Clifton [Thu, 19 Mar 2020 14:40:00 +0000 (14:40 +0000)]
Fix assertion failure in the BFD library when called to parse a file containing corrupt ELF group information.

PR 25699
* elf.c (bfd_elf_set_group_contents): Replace assertion with an
error return.

4 years agoAvoid get_ptrace_pid() usage on NetBSD in x86-bsd-nat.c
Kamil Rytarowski [Thu, 19 Mar 2020 13:01:36 +0000 (14:01 +0100)]
Avoid get_ptrace_pid() usage on NetBSD in x86-bsd-nat.c

Add gdb_ptrace() that wraps the ptrace(2) API and correctly passes
the pid,lwp pair to the calls on NetBSD; and the result of
get_ptrace_pid() on other BSD Operating Systems.

gdb/ChangeLog:

* x86-bsd-nat.c (gdb_ptrace): New.
* (x86bsd_dr_set): Add new argument `ptid'.
* (x86bsd_dr_get, x86bsd_dr_set, x86bsd_dr_set_control,
x86bsd_dr_set_addr): Update.

4 years agoreadelf.c: Use unsigned long to iterate over num_syms
H.J. Lu [Thu, 19 Mar 2020 12:22:18 +0000 (05:22 -0700)]
readelf.c: Use unsigned long to iterate over num_syms

process_symbol_table () has

  unsigned long num_syms;
  ...
  for (si = 0, psym = symtab; si < num_syms; si++, psym++)

We should use unsigned long to iterate over num_syms.

* readelf.c (process_symbol_table): Use unsigned long for si.

4 years agogdb: Handle W and X remote packets without giving a warning
Andrew Burgess [Wed, 11 Mar 2020 12:30:13 +0000 (12:30 +0000)]
gdb: Handle W and X remote packets without giving a warning

In this commit:

  commit 24ed6739b699f329c2c45aedee5f8c7d2f54e493
  Date:   Thu Jan 30 14:35:40 2020 +0000

      gdb/remote: Restore support for 'S' stop reply packet

A regression was introduced such that the W and X packets would give a
warning in some cases.  The warning was:

  warning: multi-threaded target stopped without sending a thread-id, using first non-exited thread

This problem would arise when:

  1. The multi-process extensions to the remote protocol were not
  being used, and

  2. The inferior has multiple threads.

In this case when the W (or X) packet arrives the ptid of the
stop_reply is set to null_ptid, then when we arrive in
process_stop_reply GDB spots that we have multiple non-exited theads,
but the stop event didn't specify a thread-id.

The problem with this is that the W (and X) packets are actually
process wide events, they apply to all threads.  So not specifying a
thread-id is not a problem, in fact, the best these packets allow is
for the remote to specify a process-id, not a thread-id.

If we look at how the W (and X) packets deal with a specified
process-id, then what happens is GDB sets to stop_reply ptid to a
value which indicates all threads in the process, this is done by
creating a value `ptid_t (pid)`, which sets the pid field of the
ptid_t, but leaves the tid field as 0, indicating all threads.

So, this commit does the same thing for the case where there is not
process-id specified.  In process_stop_reply we not distinguish
between stop events that apply to all threads, and those that apply to
only one.  If the stop event applies to only one thread then we treat
it as before.  If, however, the stop event applies to all threads,
then we find the first non-exited thread, and use the pid from this
thread to create a `ptid_t (pid)` value.

If the target has multiple inferiors, and receives a process wide
event without specifying a process-id GDB now gives this warning:

  warning: multi-inferior target stopped without sending a process-id, using first non-exited inferior

gdb/ChangeLog:

* remote.c (remote_target::process_stop_reply): Handle events for
all threads differently.

gdb/testsuite/ChangeLog:

* gdb.server/exit-multiple-threads.c: New file.
* gdb.server/exit-multiple-threads.exp: New file.

4 years agogdb/testsuite/fortran: Add mixed language stack test
Andrew Burgess [Sat, 8 Feb 2020 21:26:31 +0000 (21:26 +0000)]
gdb/testsuite/fortran: Add mixed language stack test

This commit adds a test that builds a mixed language stack, the stack
contains frames of Fortran, C, and C++.  The test prints the backtrace
and explores the stack printing arguments of different types in frames
of different languages.

The core of the test is repeated with GDB's language set to auto,
fortran, c, and c++ in turn to ensure that GDB is happy to print
frames and frame arguments when the language is set to a value that
doesn't match the frame language.

This test currently passes, and there are no known bugs in this area.
The aim of this commit is simply to increase test coverage, as I don't
believe this functionality is currently tested.

gdb/testsuite/ChangeLog:

* gdb.fortran/mixed-lang-stack.c: New file.
* gdb.fortran/mixed-lang-stack.cpp: New file.
* gdb.fortran/mixed-lang-stack.exp: New file.
* gdb.fortran/mixed-lang-stack.f90: New file.

4 years agogdb: Remove C++ symbol aliases from completion list
Andrew Burgess [Fri, 27 Dec 2019 18:31:09 +0000 (18:31 +0000)]
gdb: Remove C++ symbol aliases from completion list

Consider debugging the following C++ program:

  struct object
  { int a; };

  typedef object *object_p;

  static int
  get_value (object_p obj)
  {
    return obj->a;
  }

  int
  main ()
  {
    object obj;
    obj.a = 0;

    return get_value (&obj);
  }

Now in a GDB session:

  (gdb) complete break get_value
  break get_value(object*)
  break get_value(object_p)

Or:

  (gdb) break get_va<TAB>
  (gdb) break get_value(object<RETURN>
  Function "get_value(object" not defined.
  Make breakpoint pending on future shared library load? (y or [n]) n

The reason this happens is that we add completions based on the
msymbol names and on the symbol names.  For C++ both of these names
include the parameter list, however, the msymbol names have some
differences from the symbol names, for example:

  + typedefs are resolved,
  + whitespace rules are different around pointers,
  + the 'const' keyword is placed differently.

What this means is that the msymbol names and symbol names appear to
be completely different to GDB's completion tracker, and therefore to
readline when it offers the completions.

This commit builds on the previous commit which reworked the
completion_tracker class.  It is now trivial to add a
remove_completion member function, this is then used along with
cp_canonicalize_string_no_typedefs to remove the msymbol aliases from
the completion tracker as we add the symbol names.

Now, for the above program GDB only presents a single completion for
'get_value', which is 'get_value(object_p)'.

It is still possible to reference the symbol using the msymbol name,
so a user can manually type out 'break get_value (object *)' if they
wish and will get the expected behaviour.

I did consider adding an option to make this alias exclusion optional,
in the end I didn't bother as I didn't think it would be very useful,
but I can easily add such an option if people think it would be
useful.

gdb/ChangeLog:

* completer.c (completion_tracker::remove_completion): Define new
function.
* completer.h (completion_tracker::remove_completion): Declare new
function.
* symtab.c (completion_list_add_symbol): Remove aliasing msymbols
when adding a C++ function symbol.

gdb/testsuite/ChangeLog:

* gdb.linespec/cp-completion-aliases.cc: New file.
* gdb.linespec/cp-completion-aliases.exp: New file.

Change-Id: Ie5c7c9fc8ecf973072cfb4a9650867104bf7f50c

4 years agogdb: Restructure the completion_tracker class
Andrew Burgess [Mon, 27 Jan 2020 17:37:20 +0000 (17:37 +0000)]
gdb: Restructure the completion_tracker class

In this commit I rewrite how the completion tracker tracks the
completions, and builds its lowest common denominator (LCD) string.
The LCD string is now built lazily when required, and we only track
the completions in one place, the hash table, rather than maintaining
a separate vector of completions.

The motivation for these changes is that the next commit will add the
ability to remove completions from the list, removing a completion
will invalidate the LCD string, so we need to keep hold of enough
information to recompute the LCD string as needed.

Additionally, keeping the completions in a vector makes removing a
completion expensive, so better to only keep the completions in the
hash table.

This commit doesn't add any new functionality itself, and there should
be no user visible changes after this commit.

For testing, I ran the testsuite as usual, but I also ran some manual
completion tests under valgrind, and didn't get any reports about
leaked memory.

gdb/ChangeLog:

* completer.c (completion_tracker::completion_hash_entry): Define
new class.
(advance_to_filename_complete_word_point): Call
recompute_lowest_common_denominator.
(completion_tracker::completion_tracker): Call discard_completions
to setup the hash table.
(completion_tracker::discard_completions): Allow for being called
from the constructor, pass new equal function, and element deleter
when constructing the hash table.  Initialise new class member
variables.
(completion_tracker::maybe_add_completion): Remove use of
m_entries_vec, and store more information into m_entries_hash.
(completion_tracker::recompute_lcd_visitor): New function, most
content taken from...
(completion_tracker::recompute_lowest_common_denominator):
...here, this now just visits each item in the hash calling the
above visitor.
(completion_tracker::build_completion_result): Remove use of
m_entries_vec, call recompute_lowest_common_denominator.
* completer.h (completion_tracker::have_completions): Remove use
of m_entries_vec.
(completion_tracker::completion_hash_entry): Declare new class.
(completion_tracker::recompute_lowest_common_denominator): Change
function signature.
(completion_tracker::recompute_lcd_visitor): Declare new function.
(completion_tracker::m_entries_vec): Delete.
(completion_tracker::m_entries_hash): Initialize to NULL.
(completion_tracker::m_lowest_common_denominator_valid): New
member variable.
(completion_tracker::m_lowest_common_denominator_max_length): New
member variable.

Change-Id: I9d1db52c489ca0041b8959ca0d53b7d3af8aea72

4 years ago[gdb/testsuite] Fix gdb.opt/inline-locals.exp KFAILs
Tom de Vries [Thu, 19 Mar 2020 07:44:04 +0000 (08:44 +0100)]
[gdb/testsuite] Fix gdb.opt/inline-locals.exp KFAILs

When running test-case gdb.opt/inline-locals.exp, I get:
...
Running src/gdb/testsuite/gdb.opt/inline-locals.exp ...
KPASS: gdb.opt/inline-locals.exp: info locals above bar 2 (PRMS gdb/xyz)
KPASS: gdb.opt/inline-locals.exp: info locals above bar 3 (PRMS gdb/xyz)
...

I've opened PR25695 - 'abstract and concrete variable listed both with "info
locals"' to refer to in the PRMS field, and this patch adds that reference.

Furthermore, I noticed that while I see KPASSes, given the problem description
the tests should actually be KFAILs.  This patch also fixes that.

Tested on x86_64-linux.  With gcc 7.5.0, I get 2 KFAILs.  With clang 5.0.2,
the tests pass.

gdb/testsuite/ChangeLog:

2020-03-19  Tom de Vries  <tdevries@suse.de>

* gdb.opt/inline-locals.exp: Add kfail PR number.  Make kfail matching
more precise.

4 years agoAdditional c99 elfxx-riscv.c fix
Sebastian Huber [Wed, 18 Mar 2020 06:06:28 +0000 (07:06 +0100)]
Additional c99 elfxx-riscv.c fix

Similar to 2d0e121701a95e0f37af02bc622393b1ccd88c76.

bfd/

     * elfxx-riscv.c (riscv_parse_subset): Don't use C99.

4 years agoDon't use bfd.h in binutils/elfcomm.c
Alan Modra [Thu, 19 Mar 2020 05:03:03 +0000 (15:33 +1030)]
Don't use bfd.h in binutils/elfcomm.c

Better than warning about bfd types, just don't include bfd.h and
warn against including the header again.

* elfcomm.c: Don't include bfd.h or bucomm.h.
(program_name): Declare.
(process_archive_index_and_symbols): Replace bfd_boolean with int,
and substitute FALSE and TRUE.
(setup_archive, setup_nested_archive): Likewise.
* elfcomm.h: Likewise.

4 years agoreadelf leak in process_archive
Alan Modra [Wed, 18 Mar 2020 23:40:32 +0000 (10:10 +1030)]
readelf leak in process_archive

* readelf.c (process_archive): Always return via path freeing
memory.  Formatting.

4 years agoInvalid read in process_netbsd_elf_note
Alan Modra [Thu, 19 Mar 2020 01:49:50 +0000 (12:19 +1030)]
Invalid read in process_netbsd_elf_note

* readelf.c (process_netbsd_elf_note): Validate descsz before
accessing descdata.  Formatting.

4 years agosetup_archive parameter mismatch
Alan Modra [Thu, 19 Mar 2020 01:17:45 +0000 (11:47 +1030)]
setup_archive parameter mismatch

* elfcomm.c (setup_archive): Make file_size an off_t.  Comment.
* elfcomm.h (setup_archive): Update prototype.

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 19 Mar 2020 00:00:06 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years ago[gdb/testsuite] Add test-case gdb.dwarf2/break-inline-psymtab.exp
Tom de Vries [Wed, 18 Mar 2020 13:40:49 +0000 (14:40 +0100)]
[gdb/testsuite] Add test-case gdb.dwarf2/break-inline-psymtab.exp

Add a test-case that tests whether we can set a breakpoint on an inlined
inline function in CU for which the partial symtab has not yet been expanded.

Tested on x86_64-linux, with gcc 4.8.5, gcc-7.5.0, gcc-10.0.1, and clang
5.0.2.

gdb/testsuite/ChangeLog:

2020-03-18  Tom de Vries  <tdevries@suse.de>

* gdb.dwarf2/break-inline-psymtab-2.c: New test.
* gdb.dwarf2/break-inline-psymtab.c: New test.
* gdb.dwarf2/break-inline-psymtab.exp: New file.

4 years agoNon-contiguous memory regions support: Fix testcases after previous commit
Christophe Lyon [Wed, 18 Mar 2020 12:36:53 +0000 (12:36 +0000)]
Non-contiguous memory regions support: Fix testcases after previous commit

2020-03-18  Christophe Lyon  <christophe.lyon@linaro.org>

* testsuite/ld-arm/non-contiguous-arm4.d: Fix expected output.
* testsuite/ld-powerpc/non-contiguous-powerpc.d: Likewise.

Change-Id: I8870800177e1ff79cdd05af13613ec53ef95681f

4 years agoFix seg-fault in strip when copying a file containing corrupt secondary relocs.
Nick Clifton [Wed, 18 Mar 2020 12:12:07 +0000 (12:12 +0000)]
Fix seg-fault in strip when copying a file containing corrupt secondary relocs.

PR 25673
* elf.c (_bfd_elf_write_secondary_reloc_section): Fix illegal
memory access when processing a corrupt secondary reloc section.

4 years agoNon-contiguous memory regions support: Avoid calls to abort
Christophe Lyon [Tue, 17 Mar 2020 15:59:01 +0000 (15:59 +0000)]
Non-contiguous memory regions support: Avoid calls to abort

Use '%F' format when printing error messages to exit cleanly rather
than by calling abort().

2020-03-18  Christophe Lyon  <christophe.lyon@linaro.org>

bfd/
* elf32-arm.c (arm_build_one_stub): Emit a fatal error message
instead of calling abort.
* elf32-csky.c (csky_build_one_stub): Likewise.
* elf32-hppa.c (hppa_build_one_stub): Likewise.
* elf32-m68hc11.c (m68hc11_elf_build_one_stub): Likewise.
* elf32-m68hc12.c (m68hc12_elf_build_one_stub): Likewise.
* elf32-metag.c (metag_build_one_stub): Likewise.
* elf32-nios2.c (nios2_build_one_stub): Likewise.
* elf64-ppc.c (ppc_build_one_stub): Likewise.
(ppc_size_one_stub): Likewise.
* elfnn-aarch64.c (aarch64_build_one_stub): Likewise.

ld/
* emultempl/xtensaelf.em: Emit a fatal error message
instead of calling abort.
* ldlang.c: Likewise.

Change-Id: I60deaeeee59d4e7cab06b8a40a3e51837c43a8ab

4 years agoNamespace the reg class to avoid clashes with OS headers
Kamil Rytarowski [Tue, 17 Mar 2020 13:38:23 +0000 (14:38 +0100)]
Namespace the reg class to avoid clashes with OS headers

Fix build issues on NetBSD where the reg symbol exists in public headers.

regformats/regdef.h:22:8: error: redefinition struct
 struct reg
        ^~~
/usr/include/amd64/reg.h:51:8: note: previous definition struct
 struct reg {
        ^~~

gdb/ChangeLog:

* regformats/regdef.h: Put reg in gdb namespace.

gdbserver/ChangeLog:

* regcache.cc (find_register_by_number): Update.
* tdesc.cc (init_target_desc): Likewise.
* tdesc.h (target_desc::reg_defs): Likewise.

4 years agoAdd support for NetBSD threads in i386-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 16:41:11 +0000 (17:41 +0100)]
Add support for NetBSD threads in i386-bsd-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

Define gdb_ptrace() a wrapper function for ptrace(2) that properly passes
the pid,lwp pair on NetBSD and the result of get_ptrace_pid() for others.

gdb/ChangeLog:

* i386-bsd-nat.c (gdb_ptrace): New.
* (i386bsd_fetch_inferior_registers,
i386bsd_store_inferior_registers) Switch from pid_t to ptid_t.
* (i386bsd_fetch_inferior_registers,
i386bsd_store_inferior_registers) Use gdb_ptrace.

4 years agoAdd support for NetBSD threads in amd64-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 16:41:11 +0000 (17:41 +0100)]
Add support for NetBSD threads in amd64-bsd-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

Define gdb_ptrace() a wrapper function for ptrace(2) that properly passes
the pid,lwp pair on NetBSD and the result of get_ptrace_pid() for others.

gdb/ChangeLog:

* amd64-bsd-nat.c (gdb_ptrace): New.
* (amd64bsd_fetch_inferior_registers,
amd64bsd_store_inferior_registers) Switch from pid_t to ptid_t.
* (amd64bsd_fetch_inferior_registers,
amd64bsd_store_inferior_registers) Use gdb_ptrace.

4 years agoInclude <alloca.h> conditionally
Kamil Rytarowski [Tue, 17 Mar 2020 14:01:55 +0000 (15:01 +0100)]
Include <alloca.h> conditionally

Fixes build on NetBSD, where alloca() is defined in <stdlib.h>.

gdbsupport:

* common-defs.h: Include alloca.h if HAVE_ALLOCA_H is defined.

4 years agoRename the read symbol to xread
Kamil Rytarowski [Tue, 17 Mar 2020 12:41:46 +0000 (13:41 +0100)]
Rename the read symbol to xread

This avoids clashes with macro read in the NetBSD headers.

gdb/ChangeLog:

* user-regs.c (user_reg::read): Rename to...
(user_reg::xread): ...this.
* (append_user_reg): Rename argument `read' to `xread'.
* (user_reg_add_builtin): Likewise.
* (user_reg_add): Likewise.
* (value_of_user_reg): Likewise.

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 18 Mar 2020 00:00:05 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoAdd support for NetBSD threads in sparc-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 16:41:11 +0000 (17:41 +0100)]
Add support for NetBSD threads in sparc-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

Define gdb_ptrace() a wrapper function for ptrace(2) that properly passes
the pid,lwp pair on NetBSD and the result of get_ptrace_pid() for others.

gdb/ChangeLog:

* sparc-nat.c (gdb_ptrace): New.
* sparc-nat.c (sparc_fetch_inferior_registers)
(sparc_store_inferior_registers) Remove obsolete comment.
* sparc-nat.c (sparc_fetch_inferior_registers)
(sparc_store_inferior_registers) Switch from pid_t to ptid_t.
* sparc-nat.c (sparc_fetch_inferior_registers)
(sparc_store_inferior_registers) Use gdb_ptrace.

4 years agoFix PR number in previous delta
Nick Clifton [Tue, 17 Mar 2020 17:03:53 +0000 (17:03 +0000)]
Fix PR number in previous delta

4 years agoReplace a couple of assertions in the BFD library that can be triggered by attempts...
Nick Clifton [Tue, 17 Mar 2020 17:02:15 +0000 (17:02 +0000)]
Replace a couple of assertions in the BFD library that can be triggered by attempts to parse corrupt input files.

PR 25633
* elf.c (_bfd_elf_copy_special_section_fields): Replace assertions
with error messages.

4 years agoFix a small set of Z80 problems.
Sergey Belyashov [Tue, 17 Mar 2020 16:55:32 +0000 (16:55 +0000)]
Fix a small set of Z80 problems.

PR 25641
PR 25668
PR 25633
gas Fix disassembling ED+A4/AC/B4/BC opcodes.
Fix assembling lines containing colonless label and instruction
with first operand inside parentheses.
Fix registration of unsupported by target CPU registers.
* config/tc-z80.c: See above.
* config/tc-z80.h: See above.
* testsuite/gas/z80/colonless.d: Update test.
* testsuite/gas/z80/colonless.s: Likewise.
* testsuite/gas/z80/ez80_adl_all.d: Likewise.
* testsuite/gas/z80/ez80_unsup_regs.d: Likewise.
* testsuite/gas/z80/ez80_z80_all.d: Likewise.
* testsuite/gas/z80/gbz80_unsup_regs.d: Likewise.
* testsuite/gas/z80/r800_unsup_regs.d: Likewise.
* testsuite/gas/z80/unsup_regs.s: Likewise.
* testsuite/gas/z80/z180_unsup_regs.d: Likewise.
* testsuite/gas/z80/z80.exp: Likewise.
* testsuite/gas/z80/z80_strict_unsup_regs.d: Likewise.
* testsuite/gas/z80/z80_unsup_regs.d: Likewise.
* testsuite/gas/z80/z80n_unsup_regs.d: Likewise.

opcodes * z80-dis.c: Fix disassembling ED+A4/AC/B4/BC opcodes.

4 years agoRemove a double free in the BFD library triggered when parsing a corrupt file.
Nick Clifton [Tue, 17 Mar 2020 16:45:07 +0000 (16:45 +0000)]
Remove a double free in the BFD library triggered when parsing a corrupt file.

PR 25687
* elf.c (_bfd_elf_slurp_secondary_reloc_section): Remove redundant
free.  Add free on another failure path.

4 years agoAdd support for NetBSD threads in sh-nbsd-nat.c
Kamil Rytarowski [Tue, 17 Mar 2020 15:31:49 +0000 (16:31 +0100)]
Add support for NetBSD threads in sh-nbsd-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

gdb/ChangeLog:

* sh-nbsd-nat.c (fetch_registers): New variable lwp and pass
it to the ptrace call.
* sh-nbsd-nat.c (store_registers): Likewise.

4 years agoInherit sh_nbsd_nat_target from nbsd_nat_target
Kamil Rytarowski [Tue, 17 Mar 2020 14:07:39 +0000 (15:07 +0100)]
Inherit sh_nbsd_nat_target from nbsd_nat_target

gdb/ChangeLog:

* sh-nbsd-nat.c (sh_nbsd_nat_target): Inherit from
nbsd_nat_target instead of inf_ptrace_target.
* sh-nbsd-nat.c: Include "nbsd-nat.h", as we are now using
nbsd_nat_target.

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 17 Mar 2020 13:14:43 +0000 (13:14 +0000)]
Automatic date update in version.in

4 years agoInclude missing header to get missing declarations
Kamil Rytarowski [Mon, 16 Mar 2020 17:26:29 +0000 (18:26 +0100)]
Include missing header to get missing declarations

  CXX    amd64-bsd-nat.o
amd64-bsd-nat.c:42:1: error: no previous declaration void amd64bsd_fetch_inferior_registers(regcache*,  [-Werror=missing-declarations]
 amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum)
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
amd64-bsd-nat.c:118:1: error: no previous declaration void amd64bsd_store_inferior_registers(regcache*,  [-Werror=missing-declarations]
 amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum)
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Detected on NetBSD/amd64 9.99.49.

gdb/ChangeLog:

* amd64-bsd-nat.c: Include amd64-bsd-nat.h".

4 years agoRewrite nbsd_nat_target::pid_to_exec_file to sysctl(3)
Kamil Rytarowski [Sat, 14 Mar 2020 23:12:53 +0000 (00:12 +0100)]
Rewrite nbsd_nat_target::pid_to_exec_file to sysctl(3)

procfs on NetBSD is optional and not recommended.

* nbsd-nat.c: Include <sys/types.h>, <sys/ptrace.h> and
<sys/sysctl.h>.
* nbsd-nat.c (nbsd_nat_target::pid_to_exec_file): Rewrite.

4 years ago[gdb] Skip imports of c++ CUs
Tom de Vries [Tue, 17 Mar 2020 07:56:36 +0000 (08:56 +0100)]
[gdb] Skip imports of c++ CUs

The DWARF standard appendix E.1 describes techniques that can be used for
compression and deduplication: DIEs can be factored out into a new compilation
unit, and referenced using DW_FORM_ref_addr.

Such a new compilation unit can either use a DW_TAG_compile_unit or
DW_TAG_partial_unit.  If a DW_TAG_compile_unit is used, its contents is
evaluated by consumers as though it were an ordinary compilation unit.  If a
DW_TAG_partial_unit is used, it's only considered by consumers in the context
of a DW_TAG_imported_unit.

An example of when DW_TAG_partial_unit is required is when the factored out
DIEs are not top-level, f.i. because they were children of a namespace.  In
such a case the corresponding DW_TAG_imported_unit will occur as child of the
namespace.

In the case of factoring out DIEs from c++ compilation units, we can factor
out into a new DW_TAG_compile_unit, and no DW_TAG_imported_unit is required.

This begs the question how to interpret a top-level DW_TAG_imported_unit of a
c++ DW_TAG_compile_unit compilation unit.  The semantics of
DW_TAG_imported_unit describe that the imported unit logically appears at the
point of the DW_TAG_imported_unit entry.  But it's not clear what the effect
should be in this case, since all the imported DIEs are already globally
visible anyway, due to the use of DW_TAG_compile_unit.

So, skip top-level imports of c++ DW_TAG_compile_unit compilation units in
process_imported_unit_die.

Using the cc1 binary from PR23710 comment 1 and setting a breakpoint on do_rpo_vn:
...
$ gdb \
    -batch \
    -iex "maint set dwarf max-cache-age 316" \
    -iex "set language c++" \
    -ex "b do_rpo_vn" \
    cc1
...
we get a 8.1% reduction in execution time, due to reducing the number of
partial symtabs expanded into full symtabs from 212 to 175.

Build and reg-tested on x86_64-linux.

gdb/ChangeLog:

2020-03-17  Tom de Vries  <tdevries@suse.de>

PR gdb/23710
* dwarf2/read.h (struct dwarf2_per_cu_data): Add unit_type and lang
fields.
* dwarf2/read.c (process_psymtab_comp_unit): Initialize unit_type and lang
fields.
(process_imported_unit_die): Skip import of c++ CUs.

4 years ago[gdb/testsuite] Give up after consecutive timeouts in completion-support.exp
Tom de Vries [Tue, 17 Mar 2020 07:56:35 +0000 (08:56 +0100)]
[gdb/testsuite] Give up after consecutive timeouts in completion-support.exp

When running test-case gdb.linespec/cpcompletion.exp with target board
unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects, we run into lots of
timeouts, in particular with this pattern:
...
FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \
  cmd complete "b template2_"
FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \
  tab complete "b template2_st" (timeout)
FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \
  cmd complete "b template2_st"
FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \
  tab complete "b template2_str" (timeout)
FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \
  cmd complete "b template2_str"
FAIL: gdb.linespec/cpcompletion.exp: template-ret-type: \
  tab complete "b template2_stru" (timeout)
...

Fix this by detecting timeouts in test_complete_prefix_range_re and giving up
after 3 consecutive timeouts.

This reduces testing time from ~39m to ~9m.

Tested on x86_64-linux.

4 years agoInitialize base_value in pascal_object_print_value
Tom Tromey [Tue, 17 Mar 2020 00:32:44 +0000 (18:32 -0600)]
Initialize base_value in pascal_object_print_value

The val_print removal series introduced a new possibly-uninitialized
warning in p-valprint.c.  Examination of the code shows that the
warning does not indicate a real bug, so this patch silences the
warning by setting the variable in the catch clause of a try/catch.
(The obvious initialization did not work due to a "goto" in this
function.)

gdb/ChangeLog
2020-03-16  Tom Tromey  <tom@tromey.com>

* p-valprint.c (pascal_object_print_value): Initialize
base_value.

4 years agoarc: Migrate to new target features
Anton Kolesov [Wed, 25 Oct 2017 18:51:54 +0000 (21:51 +0300)]
arc: Migrate to new target features

This patch replaces usage of target descriptions in ARC, where the whole
description is fixed in XML, with new target descriptions where XML describes
individual features, and GDB assembles those features into actual target
description.

v2:
Removed arc.c from ALLDEPFILES in gdb/Makefile.in.
Removed vim modeline from arc-tdep.c to have it in a separate patch.
Removed braces from one line "if/else".
Undid the type change for "jb_pc" (kept it as "int").
Joined the unnecessary line breaks into one line.
No more moving around arm targets in gdb/features/Makefile.
Changed pattern checking for ARC features from "arc/{aux,core}" to "arc/".

v3:
Added include gaurds to arc.h.
Added arc_read_description to _create_ target descriptions less.

v4:
Got rid of ARC_SYS_TYPE_NONE.
Renamed ARC_SYS_TYPE_INVALID to ARC_SYS_TYPE_NUM.
Fixed a few indentations/curly braces.
Converted arc_sys_type_to_str from a macro to an inline function.

gdb/ChangeLog:
2020-03-16  Anton Kolesov  <anton.kolesov@synopsys.com>
    Shahab Vahedi  <shahab@synopsys.com>

* Makefile.in: Add arch/arc.o
* configure.tgt: Likewise.
* arc-tdep.c (arc_tdesc_init): Use arc_read_description.
(_initialize_arc_tdep): Don't initialize old target descriptions.
        (arc_read_description): New function to cache target descriptions.
* arc-tdep.h (arc_read_description): Add proto type.
* arch/arc.c: New file.
* arch/arc.h: Likewise.
* features/Makefile: Replace old target descriptions with new.
* features/arc-arcompact.c: Remove.
* features/arc-arcompact.xml: Likewise.
* features/arc-v2.c: Likewise
* features/arc-v2.xml: Likewise
* features/arc/aux-arcompact.xml: New file.
* features/arc/aux-v2.xml: Likewise.
* features/arc/core-arcompact.xml: Likewise.
* features/arc/core-v2.xml: Likewise.
* features/arc/aux-arcompact.c: Generate.
* features/arc/aux-v2.c: Likewise.
* features/arc/core-arcompact.c: Likewise.
* features/arc/core-v2.c: Likewise.
* target-descriptions (maint_print_c_tdesc_cmd): Support ARC features.

4 years agoFix dwarf2_name caching bug
Tom Tromey [Mon, 16 Mar 2020 21:00:52 +0000 (15:00 -0600)]
Fix dwarf2_name caching bug

PR gdb/25663 points out that dwarf2_name will cache a value in the
bcache and then return a substring.  However, this substring return is
only done on the branch that caches the value -- so if the function is
called twice with the same arguments, it will return different values.

This patch fixes this problem.

This area is strange.  We cache the entire demangled string, but only
return the suffix.  I looked at caching just the suffix, but it turns
out that anonymous_struct_prefix assumes that the entire string is
stored.  Also weird is that this code is demangling the linkage name
and then storing the demangled form back into the linkage name
attribute -- that seems bad, because what if some code wants to find
the actual linkage name?

Fixing these issues was non-trivial, though; and in the meantime this
patch seems like an improvement.  Regression tested on x86-64
Fedora 30.

gdb/ChangeLog
2020-03-16  Tom Tromey  <tromey@adacore.com>

PR gdb/25663:
* dwarf2/read.c (dwarf2_name): Strip leading namespaces after
putting value into bcache.

4 years agogdb: define builtin long type to be 64 bits on amd64 Cygwin
Simon Marchi [Mon, 16 Mar 2020 20:56:36 +0000 (16:56 -0400)]
gdb: define builtin long type to be 64 bits on amd64 Cygwin

On Windows x86-64 (when building with MinGW), the size of the "long"
type is 32 bits.  amd64_windows_init_abi therefore does:

    set_gdbarch_long_bit (gdbarch, 32);

This is also used when the chosen OS ABI is Cygwin, where the "long"
type is 64 bits.  GDB therefore gets sizeof(long) wrong when using the
builtin long type:

    $ ./gdb -nx --data-directory=data-directory -batch -ex "set architecture i386:x86-64" -ex "set osabi Cygwin" -ex "print sizeof(long)"
    The target architecture is assumed to be i386:x86-64
    $1 = 4

This patch makes GDB avoid setting the size of the long type to 32 bits
when using the Cygwin OS ABI.  it will inherit the value set in
amd64_init_abi.

With this patch, I get:

    $ ./gdb -nx --data-directory=data-directory -batch -ex "set architecture i386:x86-64" -ex "set osabi Cygwin" -ex "print sizeof(long)"
    The target architecture is assumed to be i386:x86-64
    $1 = 8

gdb/ChangeLog:

PR gdb/21500
* amd64-windows-tdep.c (amd64_windows_init_abi): Rename
to...
(amd64_windows_init_abi_common): ... this.  Don't set size of
long type.
(amd64_windows_init_abi): New function.
(amd64_cygwin_init_abi): New function.
(_initialize_amd64_windows_tdep): Use amd64_cygwin_init_abi for
the Cygwin OS ABI.
* i386-windows-tdep.c (_initialize_i386_windows_tdep): Clarify
comment.

4 years agogdb: select "Cygwin" OS ABI for Cygwin binaries
Simon Marchi [Mon, 16 Mar 2020 20:56:36 +0000 (16:56 -0400)]
gdb: select "Cygwin" OS ABI for Cygwin binaries

Before this patch, the "Windows" OS ABI is selected for all Windows
executables, including Cygwin ones.  This patch makes GDB differentiate
Cygwin binaries from non-Cygwin ones, and selects the "Cygwin" OS ABI
for the Cygwin ones.

To check whether a Windows PE executable is a Cygwin one, we check the
library list in the .idata section, see if it contains "cygwin1.dll".

I had to add code to parse the .idata section, because BFD doesn't seem
to expose this information.  BFD does parse this information, but only
to print it in textual form (function pe_print_idata):

  https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=blob;f=bfd/peXXigen.c;h=e42d646552a0ca1e856e082256cd3d943b54ddf0;hb=HEAD#l1261

Here's the relevant portion of the PE format documentation:

  https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-idata-section

This page was also useful:

  https://blog.kowalczyk.info/articles/pefileformat.html#9ccef823-67e7-4372-9172-045d7b1fb006

With this patch applied, this is what I get:

    (gdb) file some_mingw_x86_64_binary.exe
    Reading symbols from some_mingw_x86_64_binary.exe...
    (gdb) show osabi
    The current OS ABI is "auto" (currently "Windows").
    The default OS ABI is "GNU/Linux".

    (gdb) file some_mingw_i386_binary.exe
    Reading symbols from some_mingw_i386_binary.exe...
    (gdb) show osabi
    The current OS ABI is "auto" (currently "Windows").
    The default OS ABI is "GNU/Linux".

    (gdb) file some_cygwin_x86_64_binary.exe
    Reading symbols from some_cygwin_x86_64_binary.exe...
    (gdb) show osabi
    The current OS ABI is "auto" (currently "Cygwin").
    The default OS ABI is "GNU/Linux".

gdb/ChangeLog:

* windows-tdep.h (is_linked_with_cygwin_dll): New declaration.
* windows-tdep.c (CYGWIN_DLL_NAME): New.
(pe_import_directory_entry): New struct type.
(is_linked_with_cygwin_dll): New function.
* amd64-windows-tdep.c (amd64_windows_osabi_sniffer): Select
GDB_OSABI_CYGWIN if the BFD is linked with the Cygwin DLL.
* i386-windows-tdep.c (i386_windows_osabi_sniffer): Likewise.

4 years agogdb: rename content of i386-windows-tdep.c, cygwin to windows
Simon Marchi [Mon, 16 Mar 2020 20:56:35 +0000 (16:56 -0400)]
gdb: rename content of i386-windows-tdep.c, cygwin to windows

i386-cygwin-tdep.c has just been renamed to i386-windows-tdep.c, this
patch now renames everything in it that is not Cygwin-specific to
replace "cygwin" with "windows".

Note that I did not rename i386_cygwin_core_osabi_sniffer, since that
appears to be Cygwin-specific.

gdb/ChangeLog:

* i386-windows-tdep.c: Mass-rename "cygwin" to "windows", except
i386_cygwin_core_osabi_sniffer.

4 years agogdb: rename i386-cygwin-tdep.c to i386-windows-tdep.c
Simon Marchi [Mon, 16 Mar 2020 20:56:35 +0000 (16:56 -0400)]
gdb: rename i386-cygwin-tdep.c to i386-windows-tdep.c

Since this file contains things that apply not only to Cygwin binaries,
but also to non-Cygwin Windows binaries, I think it would make more
sense for it to be called i386-windows-tdep.c.  It is analogous to
amd64-windows-tdep.c, which we already have.

gdb/ChangeLog:

* i386-cygwin-tdep.c: Rename to...
* i386-windows-tdep.c: ... this.
* Makefile.in (ALL_TARGET_OBS): Rename i386-cygwin-tdep.c to
i386-windows-tdep.c.
* configure.tgt: Likewise.

4 years agogdb: add Windows OS ABI
Simon Marchi [Mon, 16 Mar 2020 20:56:34 +0000 (16:56 -0400)]
gdb: add Windows OS ABI

GDB currently uses the "Cygwin" OS ABI (GDB_OSABI_CYGWIN) for everything
related to Windows.  If you build a GDB for a MinGW or Cygwin target, it
will have "Cygwin" as the default OS ABI in both cases (see
configure.tgt).  If you load either a MinGW or Cygwin binary, the
"Cygwin" OS ABI will be selected in both cases.

This is misleading, because Cygwin binaries are a subset of the binaries
running on Windows.  When building something with MinGW, the resulting
binary has nothing to do with Cygwin.  Cygwin binaries are only special
in that they are Windows binaries that link to the cygwin1.dll library
(if my understanding is correct).

Looking at i386-cygwin-tdep.c, we can see that GDB does nothing
different when dealing with Cygwin binaries versus non-Cygwin Windows
binaries.  However, there is at least one known bug which would require
us to make a distinction between the two OS ABIs, and that is the size
of the built-in "long" type on x86-64.  On native Windows, this is 4,
whereas on Cygwin it's 8.

So, this patch adds a new OS ABI, "Windows", and makes GDB use it for
i386 and x86-64 PE executables, instead of the "Cygwin" OS ABI.  A
subsequent patch will improve the OS ABI detection so that GDB
differentiates the non-Cygwin Windows binaries from the Cygwin Windows
binaries, and applies the "Cygwin" OS ABI for the latter.

The default OS ABI remains "Cygwin" for the GDBs built with a Cygwin
target.

I've decided to split the i386_cygwin_osabi_sniffer function in two,
I think it's cleaner to have a separate sniffer for Windows binaries and
Cygwin cores, each checking one specific thing.

gdb/ChangeLog:

* osabi.h (enum gdb_osabi): Add GDB_OSABI_WINDOWS.
* osabi.c (gdb_osabi_names): Add "Windows".
* i386-cygwin-tdep.c (i386_cygwin_osabi_sniffer): Return
GDB_OSABI_WINDOWS when the binary's target is "pei-i386".
(i386_cygwin_core_osabi_sniffer): New function, extracted from
i386_cygwin_osabi_sniffer.
(_initialize_i386_cygwin_tdep): Register OS ABI
GDB_OSABI_WINDOWS for i386.
* amd64-windows-tdep.c (amd64_windows_osabi_sniffer): Return
GDB_OSABI_WINDOWS when the binary's target is "pei-x86-64".
(_initialize_amd64_windows_tdep): Register OS ABI GDB_OSABI_WINDOWS
for x86-64.
* configure.tgt: Use GDB_OSABI_WINDOWS as the default OS ABI
when the target matches '*-*-mingw*'.

4 years agogdb: move enum gdb_osabi to osabi.h
Simon Marchi [Mon, 16 Mar 2020 20:56:34 +0000 (16:56 -0400)]
gdb: move enum gdb_osabi to osabi.h

I think it makes sense to have it there instead of in the catch-all
defs.h.

gdb/ChangeLog:

* defs.h (enum gdb_osabi): Move to...
* osabi.h (enum gdb_osabi): ... here.
* gdbarch.sh: Include osabi.h in gdbarch.h.
* gdbarch.h: Re-generate.

4 years agogdb: recognize 64 bits Windows executables as Cygwin osabi
Simon Marchi [Mon, 16 Mar 2020 20:56:33 +0000 (16:56 -0400)]
gdb: recognize 64 bits Windows executables as Cygwin osabi

If I generate two Windows PE executables, one 32 bits and one 64 bits:

    $ x86_64-w64-mingw32-gcc test.c -g3 -O0 -o test_64
    $ i686-w64-mingw32-gcc test.c -g3 -O0 -o test_32
    $ file test_64
    test_64: PE32+ executable (console) x86-64, for MS Windows
    $ file test_32
    test_32: PE32 executable (console) Intel 80386, for MS Windows

When I load the 32 bits binary in my GNU/Linux-hosted GDB, the osabi is
correctly recognized as "Cygwin":

    $ ./gdb --data-directory=data-directory -nx test_32
    (gdb) show osabi
    The current OS ABI is "auto" (currently "Cygwin").

When I load the 64 bits binary in GDB, the osabi is incorrectly
recognized as "GNU/Linux":

    $ ./gdb --data-directory=data-directory -nx test_64
    (gdb) show osabi
    The current OS ABI is "auto" (currently "GNU/Linux").

The 32 bits one gets recognized by the i386_cygwin_osabi_sniffer
function, by its target name:

    if (strcmp (target_name, "pei-i386") == 0)
      return GDB_OSABI_CYGWIN;

The target name for the 64 bits binaries is "pei-x86-64".  It doesn't
get recognized by any osabi sniffer, so GDB falls back on its default
osabi, "GNU/Linux".

This patch adds an osabi sniffer function for the Windows 64 bits
executables in amd64-windows-tdep.c.  With it, the osabi is recognized
as "Cygwin", just like with the 32 bits binary.

Note that it may seems strange to have a binary generated by MinGW
(which has nothing to do with Cygwin) be recognized as a Cygwin binary.
This is indeed not accurate, but at the moment GDB uses the Cygwin for
everything Windows.  Subsequent patches will add a separate "Windows" OS
ABI for Windows binaries that are not Cygwin binaries.

gdb/ChangeLog:

* amd64-windows-tdep.c (amd64_windows_osabi_sniffer): New
function.
(_initialize_amd64_windows_tdep): Register osabi sniffer.

4 years ago[gdb/testsuite] Add cache_verify option for gdb_caching_procs
Tom de Vries [Mon, 16 Mar 2020 13:39:07 +0000 (14:39 +0100)]
[gdb/testsuite] Add cache_verify option for gdb_caching_procs

Test-case gdb.base/gdb-caching-proc.exp tests whether procs declared using
gdb_caching_proc give the same results when called more than once.

While this tests consistency of the procs in the context of that test-case, it
doesn't test consistency across the call sites.

Add a local variable cache_verify to proc gdb_do_cache, that can be set to 1
to verify gdb_caching_proc consistency across the call sites.

Likewise, add a local variable cache_verify_proc to set to the name of the
gdb_caching_proc to verify.  This can f.i. be used when changing an existing
proc into a gdb_caching_proc.

Tested on x86_64-linux, with cache_verify set to both 0 and 1.

gdb/testsuite/ChangeLog:

2020-03-16  Tom de Vries  <tdevries@suse.de>

* lib/cache.exp (gdb_do_cache): Add and handle local variables
cache_verify and cache_verify_proc.

4 years agoPR25675: SIGSEGV in bfd_octets_per_byte
Alan Modra [Mon, 16 Mar 2020 09:04:00 +0000 (19:34 +1030)]
PR25675: SIGSEGV in bfd_octets_per_byte

PR 25675
* elf.c (elf_sort_segments): Don't call bfd_octets_per_byte unless
we have a non-zero section count.  Do lma comparison in octets.

4 years agoasan: readelf leak in hppa_process_unwind
Alan Modra [Mon, 16 Mar 2020 00:01:45 +0000 (10:31 +1030)]
asan: readelf leak in hppa_process_unwind

This extracts code reading symbol tables into a common function that
tidies up after errors.  I've also changed an error reporting multiple
string tables to an error on multiple symbol tables.

* readelf.c (get_symbols): New function.
(process_relocs, ia64_process_unwind, hppa_process_unwind),
(arm_process_unwind, get_symbol_for_build_attribute): Use it.

4 years agoubsan: shift exponent 70 is too large
Alan Modra [Sun, 15 Mar 2020 22:24:16 +0000 (08:54 +1030)]
ubsan: shift exponent 70 is too large

* unwind-ia64.c (unw_decode_uleb128): Prevent overlarge shifts.
Detect shift overflows and check that terminating byte is found.
Print an error on a bad uleb128.

4 years agoasan: alpha-vms: null dereference
Alan Modra [Sun, 15 Mar 2020 22:14:38 +0000 (08:44 +1030)]
asan: alpha-vms: null dereference

* vms-alpha.c (dst_restore_location): Validate index into
dst_ptr_offsets array before accessing.  Return status.
(dst_retrieve_location): Similarly, making "loc" parameter a
pointer to return value.
(_bfd_vms_slurp_etir): Update calls to above functions.

4 years ago[gdb/testsuite] Fix solib-list.exp test-case for exec with debug-info
Tom de Vries [Sun, 15 Mar 2020 14:15:56 +0000 (15:15 +0100)]
[gdb/testsuite] Fix solib-list.exp test-case for exec with debug-info

Since commit a2fedca99c "Implement 'set/show exec-file-mismatch'.", I see the
following regression on openSUSE Leap 15.1:
...
FAIL: gdb.server/solib-list.exp: non-stop 0: target remote \
  (got interactive prompt)
FAIL: gdb.server/solib-list.exp: non-stop 1: target remote \
  (got interactive prompt)
...

The first FAIL in more detail:
...
(gdb) PASS: gdb.server/solib-list.exp: non-stop 0: file binfile
target remote localhost:2346
Remote debugging using localhost:2346
warning: Mismatch between current exec-file /data/gdb_versions/devel/build/\
  gdb/testsuite/outputs/gdb.server/solib-list/solib-list
and automatically determined exec-file /lib64/ld-2.26.so
exec-file-mismatch handling is currently "ask"
Load new symbol table from "/lib64/ld-2.26.so"? (y or n) n
warning: loading /lib64/ld-2.26.so Not confirmed.
Reading /lib64/ld-linux-x86-64.so.2 from remote target...
warning: File transfers from remote targets can be slow. \
  Use "set sysroot" to access files locally instead.
Reading /lib64/ld-linux-x86-64.so.2 from remote target...
Reading symbols from target:/lib64/ld-linux-x86-64.so.2...
Reading /lib64/ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote target...
Reading /lib64/.debug/ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote \
  target...
Reading /data/gdb_versions/devel/install/lib64/debug//lib64/\
  ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote target...
Reading /data/gdb_versions/devel/install/lib64/debug/lib64/\
  /ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote target...
Reading target:/data/gdb_versions/devel/install/lib64/debug/lib64/\
  /ld-2.26.so-2.26-lp151.18.7.x86_64.debug from remote target...
(No debugging symbols found in target:/lib64/ld-linux-x86-64.so.2)
0x00007ffff7dd7ea0 in ?? ()
(gdb) FAIL: gdb.server/solib-list.exp: non-stop 0: target remote (got \
  interactive prompt)
...

The commit introduces the "Load new symbol table from" question, and
gdb_test_multiple defaults to answering "no" and reporting the
"got interactive prompt" FAIL.

This FAIL is not seen on f.i. debian 10.2.  The difference originates from the
fact that the solib-list executable has debug-info in the openSUSE case, while
it doesn't in the debian case.

We can prevent the failure on openSUSE by stripping the executable from
debug-info:
...
+ exec strip --strip-debug ${binfile}
...

The difference in behaviour is a bug or improvement opportunity in the
exec-file-mismatch, filed as PR25475.

This patch fixes the FAIL by handling the question in the test-case.

Tested on x86_64-linux.

Tested on x86_64-linux with the gdbserver part of the patch introducing the
test-case reverted to ensure that this still FAILs.

gdb/testsuite/ChangeLog:

2020-03-15  Tom de Vries  <tdevries@suse.de>

* gdb.server/solib-list.exp: Handle
'Load new symbol table from "/lib64/ld-2.26.so"? (y or n)'.

4 years ago[gdb/testsuite] Fix check-read1 FAIL with gdb.base/maint.exp
Tom de Vries [Sun, 15 Mar 2020 09:43:43 +0000 (10:43 +0100)]
[gdb/testsuite] Fix check-read1 FAIL with gdb.base/maint.exp

When running test-case gdb.base/maint.exp with check-read1, I run into:
...
FAIL: gdb.base/maint.exp: (timeout) maint print objfiles
...

The FAIL happens because command output contains long lines like this:
...
file1 at $hex, file2 at $hex, ..., $file$n at $hex,
...
F.i., such a line for libc.so.debug contains 82000 chars.

Fix this this by reading long lines bit by bit.

Also, replace the testing of the command output formulated using a gdb_send
combined with gdb_expect-in-a-loop, with a regular gdb_test_multiple with
exp_continue.

Tested on x86_64-linux, with make targets check and check-read1.

gdb/testsuite/ChangeLog:

2020-03-15  Tom de Vries  <tdevries@suse.de>

* gdb.base/maint.exp: Use exp_continue in long lines for "maint print
objfiles".

4 years agoAdd C parser support for "restrict" and "_Atomic"
Tom Tromey [Sat, 14 Mar 2020 18:11:42 +0000 (12:11 -0600)]
Add C parser support for "restrict" and "_Atomic"

A user noticed that "watch -location" would fail with a "restrict"
pointer.  The issue here is that if the DWARF mentions "restrict", gdb
will put this into the type name -- but then the C parser will not be
able to parse this type.

This patch adds support for "restrict" and "_Atomic" to the C parser.
C++ doesn't have "restrict", but does have some GCC extensions.  The
type printer is changed to handle this difference as well, so that
watch expressions will work properly.

gdb/ChangeLog
2020-03-14  Tom Tromey  <tom@tromey.com>

* c-typeprint.c (cp_type_print_method_args): Print "__restrict__"
for C++.
(c_type_print_modifier): Likewise.  Add "language" parameter.
(c_type_print_varspec_prefix, c_type_print_base_struct_union)
(c_type_print_base_1): Update.
* type-stack.h (enum type_pieces) <tp_atomic, tp_restrict>: New
constants.
* type-stack.c (type_stack::insert): Handle tp_atomic and
tp_restrict.
(type_stack::follow_type_instance_flags): Likewise.
(type_stack::follow_types): Likewise.  Merge type-following code.
* c-exp.y (RESTRICT, ATOMIC): New tokens.
(space_identifier, cv_with_space_id)
(const_or_volatile_or_space_identifier_noopt)
(const_or_volatile_or_space_identifier): Remove.
(single_qualifier, qualifier_seq_noopt, qualifier_seq): New
rules.
(ptr_operator, typebase): Update.
(enum token_flag) <FLAG_C>: New constant.
(ident_tokens): Add "restrict", "__restrict__", "__restrict", and
"_Atomic".
(lex_one_token): Handle FLAG_C.

gdb/testsuite/ChangeLog
2020-03-14  Tom Tromey  <tom@tromey.com>

* gdb.base/cvexpr.exp: Add test for _Atomic and restrict.

4 years ago[gdb/testsuite] Fix check-read1 FAILs in mi-fortran-modules.exp
Tom de Vries [Sat, 14 Mar 2020 17:03:39 +0000 (18:03 +0100)]
[gdb/testsuite] Fix check-read1 FAILs in mi-fortran-modules.exp

When running test-case gdb.mi/mi-fortran-modules.exp with check-read1, I run
into:
...
FAIL: gdb.mi/mi-fortran-modules.exp: -symbol-info-module-functions (timeout)
FAIL: gdb.mi/mi-fortran-modules.exp: -symbol-info-module-functions \
  --name _all (unexpected output)
FAIL: gdb.mi/mi-fortran-modules.exp: -symbol-info-module-functions \
  --module mod[123] (unexpected output)
FAIL: gdb.mi/mi-fortran-modules.exp: -symbol-info-module-variables \
  (unexpected output)
...

Fix this by using exp_continue.

Tested on x86_64, using make target check and check-read1.

gdb/testsuite/ChangeLog:

2020-03-14  Tom de Vries  <tdevries@suse.de>

* gdb.mi/mi-fortran-modules.exp: Use exp_continue.

4 years agoAdd support for NetBSD threads in m68k-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 16:13:38 +0000 (17:13 +0100)]
Add support for NetBSD threads in m68k-bsd-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

gdb/ChangeLog:

        * m68k-bsd-nat.c (fetch_registers): New variable lwp and pass
        it to the ptrace call.
        * m68k-bsd-nat.c (store_registers): Likewise.

4 years agom68k: bsd: Change type from char * to gdb_byte *
Kamil Rytarowski [Sat, 14 Mar 2020 16:07:18 +0000 (17:07 +0100)]
m68k: bsd: Change type from char * to gdb_byte *

* m68k-bsd-nat.c (m68kbsd_supply_gregset): Change type of regs to
gdb_byte *.
* m68k-bsd-nat.c (m68kbsd_supply_fpregset): Likewise.
* m68k-bsd-nat.c (m68kbsd_collect_gregset): Likewise.
* m68k-bsd-nat.c (m68kbsd_supply_pcb): Cast &tmp to gdb_byte *.

4 years agoInherit m68k_bsd_nat_target from nbsd_nat_target
Kamil Rytarowski [Sat, 14 Mar 2020 15:54:42 +0000 (16:54 +0100)]
Inherit m68k_bsd_nat_target from nbsd_nat_target

gdb/ChangeLog:

* m68k-bsd-nat.c (m68k_bsd_nat_target): Inherit from
nbsd_nat_target instead of inf_ptrace_target.
* m68k-bsd-nat.c: Include "nbsd-nat.h", as we are now using
nbsd_nat_target.

4 years agoDefine _KERNTYPES in m68k-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 15:49:41 +0000 (16:49 +0100)]
Define _KERNTYPES in m68k-bsd-nat.c

Fixes build on NetBSD. types.h does not define register_t by default.

gdb/ChangeLog:

* m68k-bsd-nat.c: Define _KERNTYPES to get the declaration of
register_t.

4 years agoAdd support for NetBSD threads in alpha-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 15:36:16 +0000 (16:36 +0100)]
Add support for NetBSD threads in alpha-bsd-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

gdb/ChangeLog:

* alpha-bsd-nat.c (fetch_registers): New variable lwp and pass
it to the ptrace call.
* alpha-bsd-nat.c (store_registers): Likewise.

4 years agoRemove unused code from alpha-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 15:23:11 +0000 (16:23 +0100)]
Remove unused code from alpha-bsd-nat.c

gdb/ChangeLog:

* alpha-bsd-nat.c: Remove <sys/procfs.h> and "gregset.h" from
includes.
* alpha-bsd-nat.c (gregset_t, fpregset_t): Remove.
* alpha-bsd-nat.c (supply_gregset, fill_gregset, supply_fpregset,
fill_fpregset): Likewise.

4 years agoInherit alpha_netbsd_nat_target from nbsd_nat_target
Kamil Rytarowski [Sat, 14 Mar 2020 15:05:24 +0000 (16:05 +0100)]
Inherit alpha_netbsd_nat_target from nbsd_nat_target

gdb/ChangeLog:

* alpha-bsd-nat.c (alpha_netbsd_nat_target): Inherit from
nbsd_nat_target instead of inf_ptrace_target.
* alpha-bsd-nat.c: Include "nbsd-nat.h", as we are now using
nbsd_nat_target.

4 years agoDefine _KERNTYPES in alpha-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 14:53:47 +0000 (15:53 +0100)]
Define _KERNTYPES in alpha-bsd-nat.c

Fixes build on NetBSD. types.h does not define register_t by default.

gdb/ChangeLog:

* alpha-bsd-nat.c: Define _KERNTYPES to get the declaration of
register_t.

4 years ago[gdb/testsuite] Fix check-read1 FAIL in attach-many-short-lived-threads.exp
Tom de Vries [Sat, 14 Mar 2020 14:48:26 +0000 (15:48 +0100)]
[gdb/testsuite] Fix check-read1 FAIL in attach-many-short-lived-threads.exp

When running test-case gdb.threads/attach-many-short-lived-threads.exp with
check-read1, I ran into:
...
FAIL: gdb.threads/attach-many-short-lived-threads.exp: iter 1: \
  no new threads (timeout)
...

Fix this by rewriting the gdb_test_multiple call using -lbl and exp_continue.

Tested on x86_64-linux, with make targets check and check-read1.

gdb/testsuite/ChangeLog:

2020-03-14  Tom de Vries  <tdevries@suse.de>

* gdb.threads/attach-many-short-lived-threads.exp: Read "info threads"
result in line-by-line fashion.

4 years agoAdd support for NetBSD threads in arm-nbsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 14:44:28 +0000 (15:44 +0100)]
Add support for NetBSD threads in arm-nbsd-nat.c

NetBSD ptrace(2) accepts thread id (LWP) as the 4th argument for threads.

gdb/ChangeLog:

* arm-nbsd-nat.c (fetch_register): New variable lwp and pass
it to the ptrace call.
* arm-nbsd-nat.c (fetch_fp_register): Likewise.
* arm-nbsd-nat.c (fetch_fp_regs): Likewise.
* arm-nbsd-nat.c (store_register): Likewise.
* arm-nbsd-nat.c (store_regs): Likewise.
* arm-nbsd-nat.c (store_fp_register): Likewise.
* arm-nbsd-nat.c (store_fp_regs): Likewise.

4 years agoInherit arm_netbsd_nat_target from nbsd_nat_target
Kamil Rytarowski [Sat, 14 Mar 2020 13:50:51 +0000 (14:50 +0100)]
Inherit arm_netbsd_nat_target from nbsd_nat_target

gdb/ChangeLog:

* arm-nbsd-nat.c (arm_netbsd_nat_target): Inherit from
nbsd_nat_target instead of inf_ptrace_target.
* arm-nbsd-nat.c: Include "nbsd-nat.h", as we are now using
nbsd_nat_target.

4 years agoAdd support for NetBSD threads in x86-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 13:17:16 +0000 (14:17 +0100)]
Add support for NetBSD threads in x86-bsd-nat.c

NetBSD ptrace(2) PT_GETDBREGS/PT_SETDBREGS accepts thread id (LWP)
as the 4th argument for threads.

gdb/ChangeLog:

        * x86-bsd-nat.c (x86bsd_dr_get): New variable lwp and pass
        it to the ptrace call.
        * x86-bsd-nat.c (x86bsd_dr_set): Likewise.

4 years agoAdd support for threads in vax_bsd_nat_target
Kamil Rytarowski [Sat, 14 Mar 2020 12:38:30 +0000 (13:38 +0100)]
Add support for threads in vax_bsd_nat_target

ptrace(2) PT_GETREGS/PT_SETREGS accepts thread id (LWP) as the 4th
argument for threads.

gdb/ChangeLog:

* vax-bsd-nat.c (vaxbsd_supply_gregset): New variable lwp and pass
it to the ptrace call.
* vax-bsd-nat.c (vaxbsd_collect_gregset): Likewise.

4 years agoAdd explicit cast to fix build of vax-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 12:33:14 +0000 (13:33 +0100)]
Add explicit cast to fix build of vax-bsd-nat.c

gdb/ChangeLog:

* vax-bsd-nat.c (vaxbsd_supply_gregset): Cast gregs to const gdb_byte *.
* vax-bsd-nat.c (vaxbsd_collect_gregset): Cast gregs to void *.

4 years agoInherit vax_bsd_nat_target from nbsd_nat_target
Kamil Rytarowski [Sat, 14 Mar 2020 12:21:58 +0000 (13:21 +0100)]
Inherit vax_bsd_nat_target from nbsd_nat_target

gdb/ChangeLog:

* vax-bsd-nat.c (vax_bsd_nat_target): Inherit from nbsd_nat_target
instead of inf_ptrace_target.
* vax-bsd-nat.c: Include "nbsd-nat.h", as we are now using
nbsd_nat_target.

4 years agoDefine _KERNTYPES in mips-nbsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 11:54:47 +0000 (12:54 +0100)]
Define _KERNTYPES in mips-nbsd-nat.c

Fixes build on NetBSD. types.h does not define register_t by default.

gdb/ChangeLog:

* mips-nbsd-nat.c: Define _KERNTYPES to get the declaration of
register_t.

4 years agoDefine _KERNTYPES in ppc-nbsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 11:51:15 +0000 (12:51 +0100)]
Define _KERNTYPES in ppc-nbsd-nat.c

Fixes build on NetBSD. types.h does not define register_t by default.

gdb/ChangeLog:

* ppc-nbsd-nat.c: Define _KERNTYPES to get the declaration of
register_t.

4 years agoDefine _KERNTYPES in vax-bsd-nat.c
Kamil Rytarowski [Sat, 14 Mar 2020 11:20:01 +0000 (12:20 +0100)]
Define _KERNTYPES in vax-bsd-nat.c

Fixes build on NetBSD. types.h does not define register_t by default.

gdb/ChangeLog:

* vax-bsd-nat.c: Define _KERNTYPES to get the declaration of
register_t.

4 years agoInclude netbsd-core.lo for all arm/mips NetBSD targets
Kamil Rytarowski [Sat, 14 Mar 2020 10:50:43 +0000 (11:50 +0100)]
Include netbsd-core.lo for all arm/mips NetBSD targets

bfd/ChangeLog:

* configure.ac: Include netbsd-core.lo for all NetBSD arm and mips
targets.
* configure: Regenerated.

4 years agoRe: asan: more readelf leaks
Alan Modra [Sat, 14 Mar 2020 08:28:11 +0000 (18:58 +1030)]
Re: asan: more readelf leaks

In git commit fd486f32d15e I put some static variables used by
get_symbol_for_build_attribute in a file scope ba_cache struct.  This
was to prevent leaks in get_symbol_for_build_attribute, and to tidy up
before readelf exited.  The patch wasn't quite right though.  When
readelf processes more than one file it was possible to double free
arrays allocated in get_symbol_for_build_attribute.

* readelf.c (process_file): Clean ba_cache.

4 years ago[gdb/testsuite] Fix unrecognized debug output level 'statement-frontiers' message
Tom de Vries [Sat, 14 Mar 2020 09:41:46 +0000 (10:41 +0100)]
[gdb/testsuite] Fix unrecognized debug output level 'statement-frontiers' message

When running testcase gdb.cp/step-and-next-inline.exp, I get:
...
 Running src/gdb/testsuite/gdb.cp/step-and-next-inline.exp ...
 gdb compile failed, g++: error: unrecognized debug output level \
   'statement-frontiers'
 gdb compile failed, g++: error: unrecognized debug output level \
   'statement-frontiers'

                 === gdb Summary ===

 # of untested testcases         2
...

Fix this by using a new gdb_caching_proc supports_statement_frontiers.

Tested on x86_64-linux, with gcc 7.5.0 (which does not support
-gstatement-frontiers) and with gcc 8.4.0 (which does support
-gstatement-frontiers).

gdb/testsuite/ChangeLog:

2020-03-14  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (supports_statement_frontiers): New proc.
* gdb.cp/step-and-next-inline.exp: Use supports_statement_frontiers.

4 years ago[gdb/testsuite] Fix FAIL in gdb.base/printcmds.exp
Tom de Vries [Sat, 14 Mar 2020 09:17:10 +0000 (10:17 +0100)]
[gdb/testsuite] Fix FAIL in gdb.base/printcmds.exp

With test-case gdb.base/printcmds.exp, I run into:
...
(gdb) print teststring2^M
$563 = (charptr) "more contents"^M
(gdb) FAIL: gdb.base/printcmds.exp: print teststring2
...

The corresponding test is:
...
     gdb_test "print teststring2" " = (charptr) \"more contents\""
...

Fix the FAIL by adding the missing quoting for the parentheses around charptr.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-03-14  Tom de Vries  <tdevries@suse.de>

* gdb.base/printcmds.exp: Add missing quoting for "print
teststring2".