binutils-gdb.git
6 years agoAdapt gdb.ada/pkd_arr_elem.exp to accept reordered components
Joel Brobecker [Mon, 11 Dec 2017 05:16:31 +0000 (00:16 -0500)]
Adapt gdb.ada/pkd_arr_elem.exp to accept reordered components

Recent versions of GNAT are capable of reordering record components
to make their access for efficient. This patch adapts this test to
accept both cases (reordered or not).

gdb/testsuite/ChangeLog:

        * gdb.ada/pkd_arr_elem.exp: Adapt "print test" test to accept
        output with components being reordered.

6 years agoAutomatic date update in version.in
GDB Administrator [Mon, 11 Dec 2017 00:00:20 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoTypo fix
Sangamesh Mallayya [Sun, 10 Dec 2017 21:47:15 +0000 (08:17 +1030)]
Typo fix

Entirely the fault of that Alan Modra bloke.

* bfd.c (bfd_get_sign_extend_vma): Correct typo.

6 years agoAutomatic date update in version.in
GDB Administrator [Sun, 10 Dec 2017 00:00:26 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoAutomatic date update in version.in
GDB Administrator [Sat, 9 Dec 2017 00:00:14 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agodwarf2read.c: Rewrite/simplify mock_mapped_index
Pedro Alves [Fri, 8 Dec 2017 22:44:14 +0000 (22:44 +0000)]
dwarf2read.c: Rewrite/simplify mock_mapped_index

Now that dw2_expand_symtabs_matching_symbol works with the abstract
mapped_index_base, we can make mock_mapped_index inherit
mapped_index_base too instead of having it pretend to be a real
.gdb_index table.

gdb/ChangeLog:
2017-12-08  Pedro Alves  <palves@redhat.com>

* dwarf2read.c (mock_mapped_index): Reimplement as an extension of
mapped_index_base.
(check_match): Adjust to use mock_index directly.
(check_find_bounds_finds)
(test_mapped_index_find_name_component_bounds): Adjust to work
with a mapped_index_base.

6 years agoSupport wildmatching in .debug_names too.
Pedro Alves [Fri, 8 Dec 2017 22:44:13 +0000 (22:44 +0000)]
Support wildmatching in .debug_names too.

dw2_debug_names_expand_symtabs_matching currently doesn't support
symbol_name_match_type::WILD, it always matches symbol names fully.

The .gdb_index code supports via dw2_expand_symtabs_matching_symbol,
which builds the mapped_index::name_components table on demand, and
then binary searches that table.

The .debug_names names index is pretty much the same as the .gdb_index
names index, i.e., a list of fully-qualified names with no
parameter/overload info.  (There's no
what-is-the-language-of-symbol-name info in .debug_names either,
unfortunately.)

So this fixes .debug_names by factoring out the related .gdb_index
code out of the mapped_index class to a base class that is inherited
by both the .gdb_index (mapped_index) and .debug_names
(mapped_debug_names) map classes.

gdb/ChangeLog:
2017-12-08  Pedro Alves  <palves@redhat.com>

* dwarf2read.c (struct mapped_index_base): New, partially factored
out from ...
(struct mapped_index): ... this.  Inherit mapped_index_base.
(mapped_index::symbol_name_slot_invalid):
(mapped_index::symbol_name_at): Add override marker.
(mapped_index::symbol_name_count): New.
(struct mapped_debug_names): Inherit mapped_index_base.
(mapped_debug_names::symbol_name_at): New.
(mapped_debug_names::symbol_name_count): New.
(mapped_index::find_name_components_bounds): Rename to ...
(mapped_index_base::find_name_components_bounds): ... this.
(mapped_index::build_name_components): Rename to ...
(mapped_index_base::build_name_components): ... this.  Adjust to
use mapped_index_base::symbol_name_count and
mapped_index_base::symbol_name_slot_invalid.
(dw2_expand_symtabs_matching_symbol): Take a mapped_index_base
instead of a mapped_index.  Use
dw2_expand_symtabs_matching_symbol.

6 years agodwarf2read.c:mapped_index, use gdb::array_view, simplify symbol table
Pedro Alves [Fri, 8 Dec 2017 22:44:13 +0000 (22:44 +0000)]
dwarf2read.c:mapped_index, use gdb::array_view, simplify symbol table

This replaces a couple ptr+size pairs with gdb::array_view in the
.gdb_index code, and simplifies things by using an aggregate for the
type of the symbol table hash bucket instead of having to consider the
distinction between size of table vs number of slots and access name
vs vec by index.

gdb/ChangeLog:
2017-12-08  Pedro Alves  <palves@redhat.com>

* dwarf2read.c (mapped_index::symbol_table_slot): New.
(mapped_index::address_table): Now a gdb::array_view of const
gdb_byte.
(mapped_index::symbol_table): Now a gdb::array_view of
symbol_table_slot.
(mapped_index::address_table_size)
(mapped_index::symbol_table_slots): Delete.
(create_addrmap_from_index): Adjust.
(find_slot_in_mapped_hash): Adjust.
(read_index_from_section): Adjust.
(dwarf2_read_index): Adjust.

6 years agoDWARF-5: .debug_names index consumer
Jan Kratochvil [Fri, 8 Dec 2017 22:44:12 +0000 (22:44 +0000)]
DWARF-5: .debug_names index consumer

Some testcases needed to be updated as they were missing
.debug_aranges.  While that does not matter for no-index (as GDB
builds the mapping internally during dwarf2_build_psymtabs_hard) and
neither for .gdb_index (as GDB uses that internally built mapping
which it stores into .gdb_index) it does matter for .debug_names as
that simply assumes existing .debug_aranges from GCC.

gdb/ChangeLog:
2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
    Pedro Alves  <palves@redhat.com>

* defs.h (elf_sym_fns_debug_names): New declaration.
* dwarf2read.c: Include "hash_enum.h".
(mapped_debug_names): New.
(struct dwarf2_per_objfile): Add debug_names, debug_aranges and
debug_names_table.
(dwarf2_elf_names): Add ".debug_names" and ".debug_aranges".
(struct dwz_file): Add debug_names.
(dwarf2_per_objfile::locate_sections): Handle debug_names and
debug_aranges.
(locate_dwz_sections): Handle debug_names.
(create_signatured_type_table_from_debug_names)
(create_addrmap_from_aranges): New.
(dwarf2_read_index): Update function comment.
(dwarf5_augmentation): Moved up.
(read_debug_names_from_section, create_cus_from_debug_names_list)
(create_cus_from_debug_names, dwarf2_read_debug_names): New.
(dwarf5_djb_hash): Moved up.
(dw2_debug_names_iterator): New.
(read_indirect_string_at_offset): New declaration.
(mapped_debug_names::namei_to_name)
(dw2_debug_names_iterator::find_vec_in_debug_names)
(dw2_debug_names_iterator::next, dw2_debug_names_lookup_symbol)
(dw2_debug_names_dump, dw2_debug_names_expand_symtabs_for_function)
(dw2_debug_names_expand_symtabs_matching, dwarf2_debug_names_functions):
New.
(dwarf2_initialize_objfile): Return also elf_sym_fns_debug_names.
(debug_names::djb_hash): Rename it to dwarf5_djb_hash.
(debug_names::build): Update djb_hash caller.
(write_debug_names): Move out and rename augmentation to
dwarf5_augmentation.
* elfread.c (elf_sym_fns_debug_names): New.
* psymtab.h (dwarf2_debug_names_functions): New declaration.
* symfile.h (struct dwarf2_debug_sections): Add debug_names and
debug_aranges.
* xcoffread.c (dwarf2_xcoff_names): Add debug_names and debug_aranges.

gdb/testsuite/ChangeLog:
2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
    Pedro Alves  <palves@redhat.com>

* gdb.base/maint.exp (check for .gdb_index): Check also for
.debug_names.
* gdb.dlang/watch-loc.c (.debug_aranges): New.
* gdb.dwarf2/dw2-case-insensitive-debug.S: Likewise.
* gdb.dwarf2/gdb-index.exp (check if index present, .gdb_index used)
(.gdb_index used after symbol reloading): Support also .debug_names.
* gdb.mi/dw2-ref-missing-frame-func.c (.debug_aranges): New.

6 years agoAdd gdb::hash_enum
Pedro Alves [Fri, 8 Dec 2017 22:44:12 +0000 (22:44 +0000)]
Add gdb::hash_enum

The DWARF-5 .debug_names consumer patch will want to use an
std::unordered_map with an enum as key type, like:

std::unordered_map<sect_offset, dwarf2_per_cu_data*>

That doesn't work in C++11 in non-recent compilers due to a language
defect:

 http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2148

~~~
  In file included from /usr/include/c++/5.3.1/bits/hashtable.h:35:0,
   from /usr/include/c++/5.3.1/unordered_set:47,
   from src/gdb/dwarf2read.c:79:
  /usr/include/c++/5.3.1/bits/hashtable_policy.h: In instantiation of ‘struct std::__detail::__is_noexcept_hash<sect_offset, std::hash<sect_offset> >’:
  /usr/include/c++/5.3.1/type_traits:137:12:   required from ‘struct std::__and_<std::__is_fast_hash<std::hash<sect_offset> >, std::__detail::__is_noexcept_hash<sect_offset, std::hash<sect_offset> > >’
  /usr/include/c++/5.3.1/type_traits:148:38:   required from ‘struct std::__not_<std::__and_<std::__is_fast_hash<std::hash<sect_offset> >, std::__detail::__is_noexcept_hash<sect_offset, std::hash<sect_offset> > > >’
  /usr/include/c++/5.3.1/bits/unordered_map.h:100:66:   required from ‘class std::unordered_map<sect_offset, dwarf2_per_cu_data*>’
  src/gdb/dwarf2read.c:3260:30:   required from here
  /usr/include/c++/5.3.1/bits/hashtable_policy.h:85:34: error: no match for call to ‘(const std::hash<sect_offset>) (const sect_offset&)’
    noexcept(declval<const _Hash&>()(declval<const _Key&>()))>
    ^
  In file included from /usr/include/c++/5.3.1/bits/move.h:57:0,
   from /usr/include/c++/5.3.1/bits/stl_pair.h:59,
   from /usr/include/c++/5.3.1/bits/stl_algobase.h:64,
   from /usr/include/c++/5.3.1/bits/char_traits.h:39,
   from /usr/include/c++/5.3.1/string:40,
   from /home/pedro/gdb/mygit/src/gdb/common/common-utils.h:23,
   from /home/pedro/gdb/mygit/src/gdb/common/common-defs.h:78,
   from /home/pedro/gdb/mygit/src/gdb/defs.h:28,
   from /home/pedro/gdb/mygit/src/gdb/dwarf2read.c:31:
~~~

This commits adds a helper replacement.

gdb/ChangeLog:
2017-12-08  Pedro Alves  <palves@redhat.com>

* common/hash_enum.h: New file.

6 years agoRefactor: Move some generic code out of .gdb_index code
Jan Kratochvil [Fri, 8 Dec 2017 22:44:11 +0000 (22:44 +0000)]
Refactor: Move some generic code out of .gdb_index code

Preparation for the next patch.

gdb/ChangeLog
2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

* dwarf2read.c (create_cu_from_index_list): New from ...
(create_cus_from_index_list): ... this function, use it.
(dw_expand_symtabs_matching_file_matcher)
(dw2_expand_symtabs_matching_one): New from ...
(dw2_expand_symtabs_matching): ... this function, use them.

6 years agoChange dwarf2_initialize_objfile's return value
Jan Kratochvil [Fri, 8 Dec 2017 22:44:11 +0000 (22:44 +0000)]
Change dwarf2_initialize_objfile's return value

dwarf2_initialize_objfile was returning boolean whether it is psymtabs
or .gdb_index while now it needs to return also whether it is
.debug_names.

gdb/ChangeLog
2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

* defs.h (elf_sym_fns_lazy_psyms, elf_sym_fns_gdb_index): Move here
declarations from elfread.c.
(dwarf2_initialize_objfile): Change return value.
* elfread.c (elf_sym_fns_lazy_psyms, elf_sym_fns_gdb_index): Move these
declarations to defs.h.
(elf_symfile_read): Adjust dwarf2_initialize_objfile caller.
* symfile.h (dwarf2_initialize_objfile): Change return type.

6 years agoDWARF-5: .debug_names index producer
Jan Kratochvil [Fri, 8 Dec 2017 22:44:10 +0000 (22:44 +0000)]
DWARF-5: .debug_names index producer

This adds a new "-dwarf-5" switch to "save gdb-index" that makes it
generate index files with DWARF-5 .debug_names/.debug_str sections
instead of GDB's own .gdb_index.

We should probably add a command line option to
contrib/gdb-add-index.sh (incl. cc-with-tweaks.sh) for the new
-dwarf-5 GDB option, and a new target board to make it more convenient
to exercise this.  To be done later.

gdb/ChangeLog
2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
    Pedro Alves  <palves@redhat.com>

* contrib/gdb-add-index.sh (index): Rename to ...
(index4): ... here.
(index5, debugstr, debugstrmerge, debugstrerr): New variables.
Support also .debug_names and .debug_str.
* dwarf2read.c: Include cmath, set, list.
(INDEX_SUFFIX): Rename to ...
(INDEX4_SUFFIX): ... here.
(INDEX5_SUFFIX, DEBUG_STR_SUFFIX): New.
(file_write(FILE *, const void *, size_t)): New.
(file_write(FILE *, const std::vector<Elem, Alloc> &)): New.
(data_buf::append_unsigned_leb128, data_buf::empty): New.
(data_buf::file_write): Use ::file_write.
(data_buf::c_str, dwarf5_djb_hash, debug_names)
(check_dwarf64_offsets): New.
(psyms_seen_size, write_gdbindex): New from
write_psymtabs_to_index code.
(dwarf5_gdb_augmentation, write_debug_names, assert_file_size)
(enum dw_index_kind): New.
(write_psymtabs_to_index): New parameter index_kind.  Support
filename_str and out_file_str.  Move code to write_gdbindex,
possibly call write_debug_names.
(save_gdb_index_command): New parameter -dwarf-5.
(_initialize_dwarf2_read): Document the new parameter -dwarf-5.

gdb/doc/ChangeLog
2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

* gdb.texinfo (Index Files): Document .debug_names and -dwarf-5.
--

 gdb/contrib/gdb-add-index.sh |   53 ++
 gdb/doc/gdb.texinfo          |   24 +
 gdb/dwarf2read.c             |  919 ++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 935 insertions(+), 61 deletions(-)

6 years agocc-with-tweaks.sh: Use gdb-add-index.sh
Jan Kratochvil [Fri, 8 Dec 2017 22:44:10 +0000 (22:44 +0000)]
cc-with-tweaks.sh: Use gdb-add-index.sh

With DWARF-5 .debug_names, the commands to add the index to the symbol
file are more complicated, as now also .debug_str needs to be
modified.

Currently, contrib/cc-with-tweaks.sh calls objcopy to handle the '-i'
option instead of using contrib/gdb-add-index.sh which basically does
the same.  To help with .debug_names, this commit makes
contrib/cc-with-tweaks.sh reuse contrib/gdb-add-index.sh instead.

A problem this ran into is whether contrib/cc-with-tweaks.sh should
fail or not when no index is produced.

Currently, contrib/cc-with-tweaks.sh is more quiet (=successful) than
contrib/gdb-add-index.sh and so with no further changes testsuite runs
with an index would "regress".  This commit tries to keep the behavior
unchanged.  Some cases still error with:
Ada is not currently supported by the index
But some cases (such as some trivial gdb.dwarf2/ testcases with no DWARF data
to index) produce no index while the testcases still PASS now instead of:
-PASS: gdb.arch/i386-bp_permanent.exp: stack pointer value matches
+gdb compile failed, gdb-add-index.sh: No index was created for gdb/testsuite.unix.-m64/outputs/gdb.arch/i386-bp_permanent/i386-bp_permanent
+gdb-add-index.sh: [Was there no debuginfo? Was there already an index?]
+UNTESTED: gdb.arch/i386-bp_permanent.exp: failed to compile

gdb/ChangeLog
2017-12-08  Jan Kratochvil  <jan.kratochvil@redhat.com>
    Pedro Alves  <palves@redhat.com>

* contrib/cc-with-tweaks.sh: Change interpreter to bash, incl. initial
comment.
(GDB_ADD_INDEX): New variable.
<$want_index>: Call $GDB_ADD_INDEX.

6 years agoWork around sparc glibc bug
Alan Modra [Fri, 8 Dec 2017 01:10:31 +0000 (11:40 +1030)]
Work around sparc glibc bug

* elfxx-sparc.c (_bfd_sparc_elf_relocate_section): When emitting
dynamic R_SPARC_RELATIVE for GOT entries, ensure the section
contents are zeroed.

6 years agoFix thinko on dtrace-probe.c:dtrace_process_dof_probe
Sergio Durigan Junior [Fri, 8 Dec 2017 20:33:55 +0000 (15:33 -0500)]
Fix thinko on dtrace-probe.c:dtrace_process_dof_probe

While investigating PR gdb/22557 ("Regression:
gdb.base/dtrace-probe.exp"), I noticed that the code is wrongly
declaring a new "expression_up" variable inside the TRY block in
"dtrace_process_dof_probe".  This causes the outter "expr" variable to
be empty, which may have an impact later when evaluating the
expression.

This commit fixes that.  Unfortunately the script used to test DTrace
probes (gdb/testsuite/lib/pdtrace.in) is not very reliable so I cannot
say whether this commit fixes the PR mentioned above.  Nonetheless,
it's an obvious fix and should go in.

gdb/ChangeLog:
2017-12-08  Sergio Durigan Junior  <sergiodj@redhat.com>

* dtrace-probe.c (dtrace_process_dof_probe): Do not declare a new
"expression_up" inside the TRY block.

6 years agoClear non-significant bits of address in watchpoint
Yao Qi [Fri, 8 Dec 2017 17:27:03 +0000 (17:27 +0000)]
Clear non-significant bits of address in watchpoint

Nowadays, GDB can't set watchpoint on tagged address on AArch64,

(gdb) p p2
$1 = (int *) 0xf000fffffffff474
(gdb) watch *((int *) 0xf000fffffffff474)
Hardware watchpoint 2: *((int *) 0xf000fffffffff474)
(gdb) c
Continuing.
main () at
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-tagged-pointer.c:45
45   void (*func_ptr) (void) = foo;
Unexpected error setting hardware debug registers

This patch is about setting watchpoint on a tagged address.  Unlike
breakpoint, watchpoint record the expression rather than the address, and
when a watchpoint is fired, GDB checks the expression value changed
instead of matching address, so we can mask the watchpoint address by
getting rid of non-significant bits of address.

gdb:

2017-12-08  Yao Qi  <yao.qi@linaro.org>

* breakpoint.c (update_watchpoint): Call
address_significant.

gdb/testsuite:

2017-12-08  Yao Qi  <yao.qi@linaro.org>

* gdb.arch/aarch64-tagged-pointer.c (main): Update.
* gdb.arch/aarch64-tagged-pointer.exp: Add tests for watchpoint.

6 years agoAdjust breakpoint address by clearing non-significant bits
Yao Qi [Fri, 8 Dec 2017 17:27:03 +0000 (17:27 +0000)]
Adjust breakpoint address by clearing non-significant bits

Tag in tagged address on AArch64 is treated as a non-significant bits of
address, which can be got by gdbarch method significant_addr_bit, and gdb
can clear these bits.

With this patch, when user sets a breakpoint on tagged address on AArch64,
GDB will drop the top byte of address, and put breakpoint at the new place,
as shown below,

(gdb) hbreak *func_ptr
warning: Breakpoint address adjusted from 0xf000000000400690 to 0x00400690.
Hardware assisted breakpoint 2 at 0x400690

(gdb) break *func_ptr
warning: Breakpoint address adjusted from 0xf000000000400690 to 0x00400690.
Breakpoint 3 at 0x400690

When program hits a breakpoint, the stopped pc reported by Linux kernel is
the address *without* tag, so it is better the address recorded in
breakpoint location is the one without tag too, so we can still match
breakpoint location address and stopped pc reported by Linux kernel, by
simple compare.

gdb:

2017-12-08  Yao Qi  <yao.qi@linaro.org>

* breakpoint.c (adjust_breakpoint_address): Call
address_significant.

gdb/testsuite:

2017-12-08  Yao Qi  <yao.qi@linaro.org>

* gdb.arch/aarch64-tagged-pointer.c (main): Update.
* gdb.arch/aarch64-tagged-pointer.exp: Add test for breakpoint.

6 years agoClear non-significant bits of address on memory access
Yao Qi [Fri, 8 Dec 2017 17:27:03 +0000 (17:27 +0000)]
Clear non-significant bits of address on memory access

ARMv8 supports tagged address, that is, the top one byte in address
is ignored.  It is always enabled on aarch64-linux.  See
https://www.kernel.org/doc/Documentation/arm64/tagged-pointers.txt

The tag in the tagged address is modeled as non-significant bits in
address, so this patch adds a new gdbarch method significant_addr_bit and
clear the non-significant bits (the top byte in ARMv8) of the virtual
address at the point before passing address to target cache layer.  IOW,
the address used in the target cache layer is already cleared.

Before this patch,
(gdb) x/x 0x0000000000411030
0x411030 <global>: 0x00000000
(gdb) x/x 0xf000000000411030
0xf000000000411030: Cannot access memory at address 0xf000000000411030

After this patch,

(gdb) x/x 0x0000000000411030
0x411030 <global>: 0x00000000
(gdb) x/x 0xf000000000411030
0xf000000000411030: 0x00000000

Note that I used address_significant in paddress, but it causes a
regression gdb.base/long_long.exp, because gdb clears the non-significant
bits in address, but test still expects them.

p/a val.oct^M
$24 = 0x2ee53977053977^M
(gdb) FAIL: gdb.base/long_long.exp: p/a val.oct

so I defer the change there.

gdb:

2017-12-08  Yao Qi  <yao.qi@linaro.org>

* aarch64-tdep.c (aarch64_gdbarch_init): Install gdbarch
significant_addr_bit.
* gdbarch.sh (significant_addr_bit): New.
* gdbarch.c, gdbarch.h: Re-generated.
* target.c (memory_xfer_partial): Call address_significant.
* utils.c (address_significant): New function.
* utils.h (address_significant): Declare.

2017-12-08  Yao Qi  <yao.qi@linaro.org>

gdb/testsuite:

* gdb.arch/aarch64-tagged-pointer.c: New file.
* gdb.arch/aarch64-tagged-pointer.exp: New file.

6 years agoC++-ify parse_format_string
Tom Tromey [Thu, 23 Nov 2017 03:17:28 +0000 (20:17 -0700)]
C++-ify parse_format_string

This replaces parse_format_string with a class, removing some
constructors along the way.  While doing this, I found that one
argument to gen_printf is unused, so I removed it.

Also, I am not completely sure, but the use of `release' in
maint_agent_printf_command and parse_cmd_to_aexpr seems like it may
leak expressions.

Regression tested by the buildbot.

ChangeLog
2017-12-08  Tom Tromey  <tom@tromey.com>

* printcmd.c (ui_printf): Update.  Use std::vector.
* common/format.h (struct format_piece): Add constructor.
<string>: Now const.
(class format_pieces): New class.
(parse_format_string, free_format_pieces)
(free_format_pieces_cleanup): Remove.
* common/format.c (format_pieces::format_pieces): Rename from
parse_format_string.  Update.
(free_format_pieces, free_format_pieces_cleanup): Remove.
* breakpoint.c (parse_cmd_to_aexpr): Update.  Use std::vector.
* ax-gdb.h (gen_printf): Remove argument.
* ax-gdb.c (gen_printf): Remove "frags" argument.
(maint_agent_printf_command): Update.  Use std::vector.

gdbserver/ChangeLog
2017-12-08  Tom Tromey  <tom@tromey.com>

* ax.c (ax_printf): Update.

6 years agogas: xtensa: fix comparison of trampoline chain symbols
Max Filippov [Thu, 7 Dec 2017 06:52:16 +0000 (22:52 -0800)]
gas: xtensa: fix comparison of trampoline chain symbols

Don't use address where symbol gets resolved, as during section
relaxation symbols will slide, instead canonicalize symbols and check
that they are are the same.
This fixes a bug when a relaxed jump goes into the wrong trampoline.

gas/
2017-12-07  Max Filippov  <jcmvbkbc@gmail.com>

* config/tc-xtensa.c (xg_order_trampoline_chain): Replace
xg_order_trampoline_chain_entry call with check for
canonicalized symbol equality and offset equality.

6 years agoAdjust gdb.arch/i386-sse-stack-align.exp print statement
Sergio Durigan Junior [Thu, 7 Dec 2017 23:27:22 +0000 (18:27 -0500)]
Adjust gdb.arch/i386-sse-stack-align.exp print statement

Since:

commit 7022349d5c86bae74b49225515f42d2e221bd368
Author: Pedro Alves <palves@redhat.com>
Date:   Mon Sep 4 20:21:13 2017 +0100

    Stop assuming no-debug-info functions return int

We now have to explicitly tell GDB the type of the non-debug-info
function we want to print (by casting).  This commit adjusts the
"print" statement on gdb.arch/i386-sse-stack-align.exp to do the
proper cast, fixing a failure that started to happen after the
mentioned commit.

gdb/testsuite/ChangeLog:
2017-12-08  Sergio Durigan Junior  <sergiodj@redhat.com>

* gdb.arch/i386-sse-stack-align.exp: Cast "print" function call
"int".

6 years agoFix PR 22567: set SAL .section in minsym_found
Yao Qi [Fri, 8 Dec 2017 15:43:49 +0000 (15:43 +0000)]
Fix PR 22567: set SAL .section in minsym_found

PR 22567 is that breakpoint location can't correct gdbarch from SAL,
because its fields .section and .symtab is NULL.  We use to have code
setting .section, but was removed by 4024cf2

-  if (msymbol_is_text (msymbol))
+  CORE_ADDR func_addr;
+  if (msymbol_is_function (objfile, msymbol, &func_addr))
     {
-      sal = find_pc_sect_line (MSYMBOL_VALUE_ADDRESS (objfile, msymbol),
-                              (struct obj_section *) 0, 0);
-      sal.section = MSYMBOL_OBJ_SECTION (objfile, msymbol);

this patch adds this back by moving it to the common place at the bottom
of the function.

gdb:

2017-12-08  Yao Qi  <yao.qi@linaro.org>

PR breakpionts/22567
* linespec.c (minsym_found): Set sal.section.

6 years agoS390: Add symfile-mem
Andreas Arnez [Fri, 8 Dec 2017 13:19:23 +0000 (14:19 +0100)]
S390: Add symfile-mem

For some reason symfile-mem.o is not included in the configuration for
"s390*-*-linux*".  It was added to the configuration of most GNU/Linux
targets with a patch from Andrew Cagney:

  "Add symfile-mem to all linux targets" --
  https://sourceware.org/ml/gdb-patches/2005-02/msg00053.html

But the s390 target was overlooked at that time.  Thus the command
"add-symbol-file-from-memory" is missing and VDSO symbols are not loaded.

This is fixed.

gdb/ChangeLog:

* configure.tgt (s390*-*-linux*): Add symfile-mem.o.

6 years agoFix stripping relocs in a file with mergeable notes.
Nick Clifton [Fri, 8 Dec 2017 10:07:14 +0000 (10:07 +0000)]
Fix stripping relocs in a file with mergeable notes.

  A recent Fedora bug (1520805) exposed a problem with objcopy's reloc
  copying code, when a binary also contains mergeable notes.  The note
  merging code would delete some relocs, but then the reloc copying code
  would try to put them back again, which did not work.

  So I am checking in the patch below to fix the problem.  The patch
  also tweaks one of the binutils note merging tests so that it is
  skipped for the Sparc64 target, since this has funky relocs.

binutils * objcopy.c (copy_relocations_in_section): Use the orelocations
field of the input section, if it has been initialised.
* testsuite/binutils-all/note-2-64.d: Skip test on Sparc64.

bfd * elfcode.h (elf_write_relocs): Check for an empty howto field.

6 years agoAdd aix 64-bit check to bfd_get_sign_extend_vma
Sangamesh Mallayya [Fri, 8 Dec 2017 03:17:17 +0000 (13:47 +1030)]
Add aix 64-bit check to bfd_get_sign_extend_vma

* bfd.c (bfd_get_sign_extend_vma): Handle aix5coff64-rs6000.

6 years agoAutomatic date update in version.in
GDB Administrator [Fri, 8 Dec 2017 00:00:21 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoValidate explicit locations with early termination
Keith Seitz [Thu, 7 Dec 2017 20:59:07 +0000 (12:59 -0800)]
Validate explicit locations with early termination

breakpoints/22569 involves an internal error generated by the rather
innocent looking command:

(gdb) break -source test.cpp main
.../linespec.c:3302: internal-error: void decode_line_full(...):
Assertion `result.size () == 1 || canonical->pre_expanded' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n)

The input string is tokenized into "-source", "test.cpp", and "main"
(input parsing breaks on whitespace). create_breakpoint is then called with
the explicit location (containing only the source file name) and "main" as
the extra_string argument.

No SaLs are created for this underspecified explicit location, and the
"result.size () == 1" evaluates false (as does the pre_expanded condition).
This triggers the assertion.

Normally string_to_explicit_location validates the input string.  However,
the presence of the string "main" causes the parser to exit early:

   802        else
   803          {
   804            /* End of the explicit location specification.
   805               Stop parsing and return whatever explicit location was
   806               parsed.  */
   807            *argp = start;
   808            return location;
   809          }

This bypasses the validation that is done a few lines down in this function
which would have emitted the expected error.  This patch fixes that.

Additionally, this patch also fixes an inconsistency with error reporting
in this use case:

(gdb) b -source foo
Source filename requires function, label, or line offset.
(gdb) b -source foo main
No source file named foo.

These two commands should have elicited the same error message.

gdb/ChangeLog:

PR breakpoints/22569
* location.c (string_to_explicit_location): When terminating
parsing early, break out of enclosing loop instead of returning.

gdb/testsuite/ChangeLog:

PR breakpoints/22569
* gdb.linespec/ls-errs.exp: Change expected result of "break
-source this file has spaces.c -line 3".
Check that an explicit source file followed by whitespace is
identified as an invalid explicit location.

6 years agoRecord nested types
Keith Seitz [Thu, 7 Dec 2017 23:01:30 +0000 (15:01 -0800)]
Record nested types

GDB currently does not track types defined in classes.  Consider:

class A
{
  public:

  class B
  {
    public:
      class C { };
  };
};

(gdb) ptype A
type = class A {
   <no data fields>
}

This patch changes this behavior so that GDB records these nested types
and displays them to the user when he has set the (new) "print type"
option "nested-type-limit."

Example:

(gdb) set print type nested-type-limit 1
(gdb) ptype A
type = class A {
    <no data fields>
    class A::B {
        <no data fields>
    };
}
(gdb) set print type nested-type-limit 2
type = class A {
    <no data fields>
    class A::B {
        <no data fields>
        class A::B::C {
            <no data fields>
        };
    };
}

By default, the code maintains the status quo, that is, it will not print
any nested type definitions at all.

Testing is carried out via cp_ptype_class which required quite a bit of
modification to permit recursive calling (for the nested types).  This
was most easily facilitated by turning the ptype command output into a
queue.  Upshot: the test suite now has stack and queue data structures that
may be used by test writers.

gdb/ChangeLog

* NEWS (New commands): Mention set/show print type nested-type-limit.
* c-typeprint.c (c_type_print_base): Print out nested types.
* dwarf2read.c (struct typedef_field_list): Rename to ...
(struct decl_field_list): ... this.  Change all uses.
(struct field_info) <nested_types_list, nested_types_list_count>:
New fields.
(add_partial_symbol): Look for nested type definitions in C++, too.
(dwarf2_add_typedef): Rename to ...
(dwarf2_add_type_defn): ... this.
(type_can_define_types): New function.
Update assertion to use type_can_define_types.
Permit NULL for a field's name.
(process_structure_scope): Handle child DIEs of types that can
define types.
Copy the list of nested types into the type struct.
* gdbtypes.h (struct typedef_field): Rename to ...
(struct decl_field): ... this.  Change all uses.
[is_protected, is_private]: New fields.
(struct cplus_struct_type) <nested_types, nested_types_count>: New
fields.
(TYPE_NESTED_TYPES_ARRAY, TYPE_NESTED_TYPES_FIELD)
(TYPE_NESTED_TYPES_FIELD_NAME, TYPE_NESTED_TYPES_FIELD_TYPE)
(TYPE_NESTED_TYPES_COUNT, TYPE_NESTED_TYPES_FIELD_PROTECTED)
(TYPE_NESTED_TYPES_FIELD_PRIVATE): New macros.
* typeprint.c (type_print_raw_options, default_ptype_flags): Add
default value for print_nested_type_limit.
(print_nested_type_limit): New static variable.
(set_print_type_nested_types, show_print_type_nested_types): New
functions.
(_initialize_typeprint): Register new commands for set/show
`print-nested-type-limit'.
* typeprint.h (struct type_print_options) [print_nested_type_limit]:
New field.

gdb/testsuite/ChangeLog

* gdb.cp/nested-types.cc: New file.
* gdb.cp/nested-types.exp: New file.
* lib/cp-support.exp: Load data-structures.exp library.
(debug_cp_test_ptype_class): New global.
(cp_ptype_class_verbose, next_line): New procedures.
(cp_test_ptype_class): Add and document new parameter `recursive_qid'.
Add and document new return value.
Switch the list of lines to a queue.
Add support for new `type' key for nested type definitions.
Add debugging/troubleshooting messages.
* lib/data-structures.exp: New file.

gdb/doc/ChangeLog

* gdb.texinfo (Symbols): Document "set print type nested-type-limit"
and "show print type nested-type-limit".

6 years agoFix wrong prefix in py-breakpoint.exp
Simon Marchi [Thu, 7 Dec 2017 22:37:02 +0000 (17:37 -0500)]
Fix wrong prefix in py-breakpoint.exp

The prefix in test_bkpt_explicit_loc is wrong.  Instead of using
with_test_prefix directly, define test_bkpt_explicit_loc with
proc_with_prefix.

gdb/testsuite/ChangeLog:

* gdb.python/py-breakpoint.exp (test_bkpt_explicit_loc): Define
with proc_with_prefix, don't use with_test_prefix.

6 years agoFix regression in "commands"
Tom Tromey [Fri, 3 Nov 2017 16:26:11 +0000 (10:26 -0600)]
Fix regression in "commands"

Pedro pointed out a regression in "commands", where trying to clear a
breakpoint's command list would fail:

    (top-gdb) commands
    Type commands for breakpoint(s) 3, one per line.
    End with a line saying just "end".
    >end
    No breakpoints specified.
    (top-gdb)

I believe the bug was introduced by my patch that changes
counted_command_line to be a shared_ptr.  This causes the problem
because now the counted_command_line in commands_command_1 can be NULL,
whereas previously it never could be.

After some discussion, we agreed to simply remove the error case from
commands_command_1.

2017-12-07  Tom Tromey  <tom@tromey.com>

PR breakpoints/22511:
* breakpoint.c (commands_command_1): Don't throw an exception when
no commands have been read.

2017-12-07  Tom Tromey  <tom@tromey.com>

* gdb.base/break.exp: Add test for empty "commands".

6 years agoFix build with g++ 6.3.1
Adam Stylinski [Thu, 7 Dec 2017 17:51:03 +0000 (12:51 -0500)]
Fix build with g++ 6.3.1

With g++ 6.3.1:

 target-descriptions.c: In member function ‘virtual void
 print_c_tdesc::visit_pre(const target_desc*)’:
 target-descriptions.c:1836:16: error: types may not be defined in a
 for-range-declaration [-Werror]
      for (const struct bfd_arch_info *compatible : e->compatible)
 ^~~~~~

I think at some point the forward declaration of this struct had been
removed and declared as a typedef.  This fixes that.

gdb/ChangeLog:
2017-12-07  Adam Stylinski  <adam.stylinski@etegent.com>

PR c++/21222
* target-descriptions.c (print_c_tdesc::visit_pre): Change type of
range-for variable.

6 years agoInitialize target description early in IPA
Yao Qi [Thu, 7 Dec 2017 17:07:01 +0000 (17:07 +0000)]
Initialize target description early in IPA

Target descriptions are allocated lazily, that is fine in GDBserver,
but it is not safe to call malloc in gdb_collect in IPA, because we
can set a fast tracepoint in malloc, and when the tracepoint is hit,
gdb_collect/malloc is called, deadlock or memory corruption may be
triggered.

 #0  0xf7cfc200 in malloc ()
 #1  0xf7efdc07 in operator new(unsigned int) ()
 #2  0xf7ef7636 in allocate_target_description() ()
 #3  0xf7efcbe1 in i386_create_target_description(unsigned long long, bool) ()
 #4  0xf7efb474 in i386_linux_read_description(unsigned long long) ()
 #5  0xf7efb190 in get_ipa_tdesc(int) ()
 #6  0xf7ef9baa in gdb_collect ()

The fix is to initialize all target descriptions earlier, when the
IPA is loaded.  In order to guarantee malloc is not called in IPA
in gdb_collect, I change the test to set a breakpoint on malloc, if
IPA gdb_collect calls malloc, program will hit the breakpoint, and
test fail.

continue
Continuing.

Thread 1 "" hit Breakpoint 5, 0xf7cfc200 in malloc ()
(gdb) FAIL: gdb.trace/ftrace.exp: advance through tracing

gdb/gdbserver:

2017-12-07  Yao Qi  <yao.qi@linaro.org>

* linux-aarch64-ipa.c (initialize_low_tracepoint): Call
aarch64_linux_read_description.
* linux-amd64-ipa.c (idx2mask): New array.
(get_ipa_tdesc): Move idx2mask out.
(initialize_low_tracepoint): Initialize target descriptions.
* linux-i386-ipa.c (idx2mask): New array.
(get_ipa_tdesc): Move idx2mask out.
(initialize_low_tracepoint): Initialize target descriptions.

gdb/testsuite:

2017-12-07  Yao Qi  <yao.qi@linaro.org>

* gdb.trace/ftrace.exp (run_trace_experiment): Set breakpoint on
malloc and catch syscall.

6 years agoAdd virtual destructor to selftest
Simon Marchi [Thu, 7 Dec 2017 16:48:21 +0000 (11:48 -0500)]
Add virtual destructor to selftest

Clang 6 shows this warning

  In file included from /home/emaisin/src/binutils-gdb/gdb/common/selftest.c:19:
  In file included from /home/emaisin/src/binutils-gdb/gdb/common/common-defs.h:92:
  In file included from /home/emaisin/src/binutils-gdb/gdb/common/gdb_unique_ptr.h:23:
  In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/memory:81:
  /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:76:2: error: delete called on 'selftests::selftest' that is abstract but has non-virtual destructor [-Werror,-Wdelete-non-virtual-dtor]
          delete __ptr;
          ^
  /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/unique_ptr.h:236:4: note: in instantiation of member function 'std::default_delete<selftests::selftest>::operator()' requested here
            get_deleter()(__ptr);
            ^
  /home/emaisin/src/binutils-gdb/gdb/common/selftest.c:57:17: note: in instantiation of member function 'std::unique_ptr<selftests::selftest, std::default_delete<selftests::selftest> >::~unique_ptr' requested here
    tests[name] = std::unique_ptr<selftest> (test);
                  ^

The error is legitimate, we (the unique_ptr) are deleting selftest
objects through the base pointer, so technically the destructor should
be virtual, so that the destructor of the subclass is invoked.

gdb/ChangeLog:

* common/selftest.h (struct selftest): Add virtual destructor.

6 years agoImplement explicit locations for Python breakpoints.
Phil Muldoon [Thu, 7 Dec 2017 16:47:33 +0000 (16:47 +0000)]
Implement explicit locations for Python breakpoints.

This introduces several new keywords to the bppy_init constructor.
The spec parameter is now optional but mutually exclusive to the
explicit keywords source, label, function and line.

gdb/ChangeLog

2017-12-07  Phil Muldoon  <pmuldoon@redhat.com>

       * python/py-breakpoint.c (bppy_init): Use string_to_event_location
       over basic location code. Implement explicit location keywords.
       (bppy_init_validate_args): New function.
       * NEWS: Document Python explicit breakpoint locations.

doc/ChangeLog

2017-12-07  Phil Muldoon  <pmuldoon@redhat.com>

       * python.texi (Breakpoints In Python): Add text relating
       to allowed explicit locations and keywords in gdb.Breakpoints.

testsuite/ChangeLog

2017-12-07  Phil Muldoon  <pmuldoon@redhat.com>

       * gdb.python/py-breakpoint.exp (test_bkpt_explicit_loc): Add new
       tests for explicit locations.

6 years agogdb/MAINTAINERS: restore m68hc11, score and xstormy16 entries
Joel Brobecker [Thu, 7 Dec 2017 13:10:33 +0000 (14:10 +0100)]
gdb/MAINTAINERS: restore m68hc11, score and xstormy16 entries

This patch restores some entries removed by a recent patch whose purpose
was to update the list of active maintainers. I thought that, the target
information was purely to document the scope of the given target, and
thus could be removed is maintainerless. But, in fact, those entries
are still useful, as a number of scripts (eg: gdb_buildall.sh) use
that information to build GDB with all targets enabled.

gdb/ChangeLog:

* MAINTAINERS: Restore target entries for m68hc11-elf,
score-elf and xstormy16-elf, incorrectly removed in a previous
patch meant to only update the list of active maintainers.

6 years agoObjcopy interleave test
Alan Modra [Thu, 7 Dec 2017 11:16:34 +0000 (21:46 +1030)]
Objcopy interleave test

PR 22465
* testsuite/ld-elf/interleave.s: Use .data sections and provide
section attrs.
* testsuite/ld-elf/interleave.ld: Discard other sections.  Adjust
for changed section names.

6 years agomcore-elf lacks shared lib support
Alan Modra [Thu, 7 Dec 2017 10:07:33 +0000 (20:37 +1030)]
mcore-elf lacks shared lib support

elf32-mcore.c has no backend create_dynamic_sections function so can't
support shared libs.

* emulparams/elf32mcore.sh (GENERATE_SHLIB_SCRIPT): Don't define.

6 years agoRewrite check_shared_lib_support
Alan Modra [Thu, 7 Dec 2017 07:20:57 +0000 (17:50 +1030)]
Rewrite check_shared_lib_support

* testsuite/lib/ld-lib.exp (check_shared_lib_support): Ask ld
under test whether -shared is supported.

6 years agoAutomatic date update in version.in
GDB Administrator [Thu, 7 Dec 2017 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agotarget_set_syscall_catchpoint, use gdb::array_view and bool
Pedro Alves [Wed, 6 Dec 2017 22:45:09 +0000 (17:45 -0500)]
target_set_syscall_catchpoint, use gdb::array_view and bool

I noticed that we're passing down a data/size pair to
target_ops::to_set_syscall_catchpoint.  This commit makes use of
gdb::array_view instead.  While at it, use bool where appropriate as
well.

gdb/ChangeLog:

* break-catch-syscall.c (insert_catch_syscall)
(remove_catch_syscall): Adjust to pass reference to
inf_data->syscalls_counts directly via gdb::array_view.
* fbsd-nat.c (fbsd_set_syscall_catchpoint): Adjust to use bool
and gdb::array_view.
* linux-nat.c (linux_child_set_syscall_catchpoint): Likewise.
* remote.c (remote_set_syscall_catchpoint): Likewise.
* target-debug.h (target_debug_print_bool): New.
(define target_debug_print_gdb_array_view_const_int): New.
* target-delegates.c: Regenerate.
* target.h (target_ops) <to_set_syscall_catchpoint>: Use
gdb::array_view and bool.
(target_set_syscall_catchpoint): Likewise.

6 years agoFix syscall group completion
Simon Marchi [Wed, 6 Dec 2017 21:27:33 +0000 (16:27 -0500)]
Fix syscall group completion

The test gdb.base/catch-syscall.exp has been failing since commit

  3d415c26bad3a15eed00d2ddf85c4268df77a4cc
  Remove cleanups from break-catch-syscall.c

The reason is that we are putting into the group_ptr array a pointer to
the buffer of the local string object.  If the string is small enough to
fit in the internal string buffer (used for small string optimizations),
the pointer will point to the local object directly.  So even if we
std::move the string to the vector, the pointer in group_ptr will still
point to the local object.  When we reuse that object (technically a new
instance, but most likely the same memory) for the next syscall, we'll
overwrite the previous string.  The result is that we'll get less
results than expected, since there will be duplicates.

We'll also run into problems if we push the string to the vector, and
then record the c_str () pointer using the string object in the vector.
The vector might get reallocated, the string may move in memory, and our
pointer in group_ptr will point to stale memory.

Instead, we have to push all the strings first, then, when we know the
vector won't change anymore, build the group_ptr array.  This is what
this patch does.

gdb/ChangeLog:

* break-catch-syscall.c (catch_syscall_completer): Get pointers
to syscall group strings after building the string vector.

6 years agoObjcopy interleave fails if section address not multiple of interleave.
Jim Wilson [Wed, 6 Dec 2017 18:34:36 +0000 (10:34 -0800)]
Objcopy interleave fails if section address not multiple of interleave.

PR 22465
binutils/
* objcopy.c (copy_section): New local extra.  If isection->lma not
exactly divisible by interleave, then bias from.  Also adjust
osection->lma if necessary.

ld/
* testsuite/ld-elf/interleave-0.d, testsuite/ld-elf/interleave-4.d,
* testsuite/ld-elf/interleave.ld, testsuite/ld-elf/interleave.s: New.

6 years agoremote: Make qXfer packets respect corresponding "set remote foo-packet"
Pedro Alves [Wed, 6 Dec 2017 11:28:47 +0000 (11:28 +0000)]
remote: Make qXfer packets respect corresponding "set remote foo-packet"

I've noticed that "set remote target-features-packet off" before
connecting has no effect -- GDB still fetches a target description
anyway.

The problem is that while most "set remote foo-packet" commands were
fixed by:

  From 4082afcc3d1af9d8063d1c8e02deb34a8b97a489 Mon Sep 17 00:00:00 2001
  From: Pedro Alves <palves@redhat.com>
  Date: Fri, 25 Apr 2014 18:07:02 +0100
  Subject: [PATCH] Fix several "set remote foo-packet on/off" commands.
  <https://sourceware.org/ml/gdb-patches/2014-04/msg00006.html>

the "qXfer" packets where missed.  This commit fixes that.

I've changed remote_search_memory too for consistency (seems like
those are the last direct references to packet->support), though the
difference is not observable because the qSearch:memory packet is auto
probed.  Note gdb.base/find-unmapped.exp already exercises explicit
"set remote search-memory-packet off".

gdb/ChangeLog:
2017-12-06  Pedro Alves  <palves@redhat.com>

* remote.c (remote_query_supported): Don't send "xmlRegisters=" if
"qXfer:features:read"" is disabled.
(remote_write_qxfer, remote_read_qxfer, remote_search_memory):
Check packet_config_support instead of packet->support directly.

gdb/testsuite/ChangeLog:
2017-12-06  Pedro Alves  <palves@redhat.com>

* gdb.arch/i386-avx.exp: If testing with a RSP target, check
force-disabling XML descriptions.
--

 gdb/remote.c                        |   16 +++++++++-------
 gdb/testsuite/gdb.arch/i386-avx.exp |   25 +++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 7 deletions(-)

6 years agoTell the linker testsuite that lm32-rtems toolchains do not support the generation...
Nick Clifton [Wed, 6 Dec 2017 10:04:51 +0000 (10:04 +0000)]
Tell the linker testsuite that lm32-rtems toolchains do not support the generation of shared libraries.

* testsuite/lib/ld-lib.exp (check_shared_lib_support): Return
false for lm32-rtems targets.

6 years agoPR22552, readelf heap buffer overflow in load_debug_section
Alan Modra [Wed, 6 Dec 2017 07:02:48 +0000 (17:32 +1030)]
PR22552, readelf heap buffer overflow in load_debug_section

PR 22552
* readelf.c (process_file_header): Don't assume XINDEX case
value for e_shstrndx is within bounds.
(load_debug_section): Sanity test e_shstrndx before attempting
to read .shstrtab.  Wrap long lines.

6 years agoBFD whitespace fixes
Alan Modra [Tue, 5 Dec 2017 22:56:00 +0000 (09:26 +1030)]
BFD whitespace fixes

Binutils is supposed to use tabs.  In my git config I have
whitespace = indent-with-non-tab,space-before-tab,trailing-space
and I got annoyed enough seeing red in "git diff" output to fix
the problems.

* doc/header.sed: Trim trailing space when splitting lines.
* aix386-core.c, * aout-adobe.c, * aout-arm.c, * aout-cris.c,
* aout-ns32k.c, * aout-target.h, * aout-tic30.c, * aoutf1.h, * aoutx.h,
* arc-got.h, * arc-plt.def, * arc-plt.h, * archive.c, * archive64.c,
* archures.c, * armnetbsd.c, * bfd-in.h, * bfd.c, * bfdio.c, * binary.c,
* bout.c, * cache.c, * cisco-core.c, * coff-alpha.c, * coff-apollo.c,
* coff-arm.c, * coff-h8300.c, * coff-i386.c, * coff-i860.c,
* coff-i960.c, * coff-m68k.c, * coff-m88k.c, * coff-mcore.c,
* coff-mips.c, * coff-ppc.c, * coff-rs6000.c, * coff-sh.c,
* coff-stgo32.c, * coff-tic4x.c, * coff-tic54x.c, * coff-tic80.c,
* coff-we32k.c, * coff-x86_64.c, * coff-z80.c, * coff-z8k.c,
* coff64-rs6000.c, * coffcode.h, * coffgen.c, * cofflink.c,
* coffswap.h, * compress.c, * corefile.c, * cpu-alpha.c, * cpu-arm.c,
* cpu-avr.c, * cpu-bfin.c, * cpu-cr16.c, * cpu-cr16c.c, * cpu-crx.c,
* cpu-d10v.c, * cpu-frv.c, * cpu-ft32.c, * cpu-i370.c, * cpu-i960.c,
* cpu-ia64-opc.c, * cpu-ip2k.c, * cpu-lm32.c, * cpu-m32r.c,
* cpu-mcore.c, * cpu-microblaze.c, * cpu-mips.c, * cpu-moxie.c,
* cpu-mt.c, * cpu-nios2.c, * cpu-ns32k.c, * cpu-or1k.c, * cpu-powerpc.c,
* cpu-pru.c, * cpu-sh.c, * cpu-spu.c, * cpu-v850.c, * cpu-v850_rh850.c,
* cpu-xgate.c, * cpu-z80.c, * dwarf1.c, * dwarf2.c, * ecoff.c,
* ecofflink.c, * ecoffswap.h, * elf-bfd.h, * elf-eh-frame.c,
* elf-hppa.h, * elf-m10200.c, * elf-m10300.c, * elf-s390-common.c,
* elf-strtab.c, * elf-vxworks.c, * elf.c, * elf32-am33lin.c,
* elf32-arc.c, * elf32-arm.c, * elf32-avr.c, * elf32-avr.h,
* elf32-bfin.c, * elf32-cr16.c, * elf32-cr16c.c, * elf32-cris.c,
* elf32-crx.c, * elf32-d10v.c, * elf32-d30v.c, * elf32-dlx.c,
* elf32-epiphany.c, * elf32-fr30.c, * elf32-frv.c, * elf32-ft32.c,
* elf32-h8300.c, * elf32-hppa.c, * elf32-i386.c, * elf32-i860.c,
* elf32-i960.c, * elf32-ip2k.c, * elf32-lm32.c, * elf32-m32c.c,
* elf32-m32r.c, * elf32-m68hc11.c, * elf32-m68hc12.c, * elf32-m68hc1x.c,
* elf32-m68hc1x.h, * elf32-m68k.c, * elf32-m88k.c, * elf32-mcore.c,
* elf32-mep.c, * elf32-metag.c, * elf32-microblaze.c, * elf32-mips.c,
* elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c,
* elf32-nds32.h, * elf32-nios2.c, * elf32-or1k.c, * elf32-pj.c,
* elf32-ppc.c, * elf32-ppc.h, * elf32-pru.c, * elf32-rl78.c,
* elf32-rx.c, * elf32-s390.c, * elf32-score.c, * elf32-score.h,
* elf32-score7.c, * elf32-sh-symbian.c, * elf32-sh.c, * elf32-sh64.c,
* elf32-sparc.c, * elf32-spu.c, * elf32-tic6x.c, * elf32-tilegx.c,
* elf32-tilegx.h, * elf32-tilepro.c, * elf32-tilepro.h, * elf32-v850.c,
* elf32-vax.c, * elf32-wasm32.c, * elf32-xc16x.c, * elf32-xgate.c,
* elf32-xgate.h, * elf32-xstormy16.c, * elf32-xtensa.c, * elf64-alpha.c,
* elf64-hppa.c, * elf64-ia64-vms.c, * elf64-mips.c, * elf64-mmix.c,
* elf64-ppc.c, * elf64-s390.c, * elf64-sh64.c, * elf64-sparc.c,
* elf64-tilegx.c, * elf64-tilegx.h, * elf64-x86-64.c, * elfcore.h,
* elflink.c, * elfn32-mips.c, * elfnn-aarch64.c, * elfnn-ia64.c,
* elfnn-riscv.c, * elfxx-aarch64.c, * elfxx-aarch64.h, * elfxx-ia64.c,
* elfxx-ia64.h, * elfxx-mips.c, * elfxx-riscv.c, * elfxx-sparc.c,
* elfxx-tilegx.c, * elfxx-x86.c, * elfxx-x86.h, * freebsd.h, * hash.c,
* host-aout.c, * hp300hpux.c, * hppabsd-core.c, * hpux-core.c,
* i386aout.c, * i386linux.c, * i386lynx.c, * i386mach3.c, * i386msdos.c,
* i386netbsd.c, * ieee.c, * ihex.c, * irix-core.c, * libaout.h,
* libbfd-in.h, * libbfd.c, * libcoff-in.h, * libnlm.h, * libpei.h,
* libxcoff.h, * linker.c, * lynx-core.c, * m68k4knetbsd.c,
* m68klinux.c, * m68knetbsd.c, * m88kmach3.c, * mach-o-aarch64.c,
* mach-o-arm.c, * mach-o-i386.c, * mach-o-target.c, * mach-o-x86-64.c,
* mach-o.c, * mach-o.h, * merge.c, * mipsbsd.c, * mmo.c, * netbsd.h,
* netbsd-core.c, * newsos3.c, * nlm-target.h, * nlm32-ppc.c,
* nlm32-sparc.c, * nlmcode.h, * ns32k.h, * ns32knetbsd.c, * oasys.c,
* opncls.c, * pc532-mach.c, * pdp11.c, * pe-arm.c, * pe-i386.c,
* pe-mcore.c, * pe-mips.c, * pe-x86_64.c, * peXXigen.c, * pef.c,
* pef.h, * pei-arm.c, * pei-i386.c, * pei-mcore.c, * pei-x86_64.c,
* peicode.h, * plugin.c, * ppcboot.c, * ptrace-core.c, * reloc.c,
* riscix.c, * rs6000-core.c, * section.c, * som.c, * som.h,
* sparclinux.c, * sparcnetbsd.c, * srec.c, * stabs.c, * sunos.c,
* syms.c, * targets.c, * tekhex.c, * trad-core.c, * vax1knetbsd.c,
* vaxnetbsd.c, * verilog.c, * versados.c, * vms-alpha.c, * vms-lib.c,
* vms-misc.c, * wasm-module.c, * wasm-module.h, * xcofflink.c,
* xsym.c, * xsym.h: Whitespace fixes.
* bfd-in2.h, * libbfd.h, * libcoff.h: Regenerate.

6 years agoFix Common symbol override test fails
Alan Modra [Wed, 6 Dec 2017 07:01:15 +0000 (17:31 +1030)]
Fix Common symbol override test fails

Fixes fails on SH and NDS32 introduced by dyn_reloc tidy.

* elf32-lm32.c (lm32_elf_check_relocs): Skip non-ALLOC sections.
* elf32-m32r.c (m32r_elf_check_relocs): Likewise.
* elf32-nds32.c (nds32_elf_check_relocs): Likewise.
* elf32-or1k.c (or1k_elf_check_relocs): Likewise.
* elf32-sh.c (sh_elf_check_relocs): Likewise.

6 years agoEnable shared lib tests for frv, lm32, m32r, microblaze, nds32 and or1k
Alan Modra [Tue, 5 Dec 2017 22:34:48 +0000 (09:04 +1030)]
Enable shared lib tests for frv, lm32, m32r, microblaze, nds32 and or1k

These claim to support shared libs when configuring for <target>-linux
(in contrast to <target>-elf which doesn't support shared libs).

* testsuite/lib/ld-lib.exp (check_shared_lib_support): Return true
for frv, lm32, m32r, microblaze, nds32 and or1k linux targets.

6 years agodyn_relocs tidy
Alan Modra [Mon, 4 Dec 2017 23:33:03 +0000 (10:03 +1030)]
dyn_relocs tidy

Many targets define their own dyn_relocs struct when they could use
struct elf_dyn_relocs.  This patch tidies that, and uses
readonly_dynrelocs in a few more places.

The SH adjust_dynamic_symbol had some really weird code dating back to
2002 that looked over dynamic relocations for any in SEC_HAS_CONTENTS
or SEC_READONLY sections, rather than just the usual SEC_READONLY
sections.  So basically any dynamic relocation.  What's more, the SH
relocate_section has no support for emitting dynamic relocations in
non-PIC.  In other words, SH has no support for avoiding copy relocs
in non-PIC.  I've made that more obvious by using "if (0 && ..)" in
asjust_dynamic_symbol.

Unfortunately, LM32, M32R, NDS32, and OR1K copied the bogus SH
adjust_dynamic_symbol code.  So none of those targets would have
avoided copy relocs.  LM32, M32R, NDS32 get the "if (0)" treatment
too.  (LM32 is even more broken in that non_got_ref is never set.)

OR1K relocate_section looks like it might support dynamic relocs in
non-PIC, so I've enabled the copy reloc avoidance code for that
target.

* elf32-hppa.c (struct elf32_hppa_dyn_reloc_entry): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(elf32_hppa_adjust_dynamic_symbol): Comment tidy.
* elf32-lm32.c (struct elf_lm32_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(lm32_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable.
Disable -z no-copyreloc too.
* elf32-m32r.c (struct elf_m32r_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(m32r_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable.
Disable -z no-copyreloc too.
* elf32-metag.c (struct elf_metag_dyn_reloc_entry): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(elf_metag_adjust_dynamic_symbol): Use readonly_dynrelocs.
* elf32-microblaze.c (struct elf32_mb_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(readonly_dynrelocs): New function.
(microblaze_elf_adjust_dynamic_symbol): Use it.
* elf32-nds32.c (struct elf_nds32_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(nds32_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable.
Disable -z no-copyreloc too.
* elf32-nios2.c (struct elf32_nios2_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
* elf32-or1k.c (struct elf_or1k_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(or1k_elf_adjust_dynamic_symbol): Use readonly_dynrelocs.
* elf32-sh.c (struct elf_sh_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(sh_elf_adjust_dynamic_symbol): Use readonly_dynrelocs, but disable.
Disable -z no-copyreloc too.
* elf32-tilepro.c (struct tilepro_elf_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(tilepro_elf_adjust_dynamic_symbol): Use readonly_dynrelocs.
* elfnn-riscv.c (struct riscv_elf_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(riscv_elf_adjust_dynamic_symbol): Use readonly_dynrelocs.
* elfxx-sparc.c (struct _bfd_sparc_elf_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(_bfd_sparc_elf_adjust_dynamic_symbol): Use readonly_dynrelocs.
* elfxx-tilegx.c (struct tilegx_elf_dyn_relocs): Delete.  Use
struct elf_dyn_relocs throughout file instead.
(tilegx_elf_adjust_dynamic_symbol): Use readonly_dynrelocs.
* elf32-s390.c (elf_s390_adjust_dynamic_symbol): Use readonly_dynrelocs.
* elf64-s390.c (elf_s390_adjust_dynamic_symbol): Use readonly_dynrelocs.

6 years agoComment tidy
Alan Modra [Mon, 4 Dec 2017 23:35:19 +0000 (10:05 +1030)]
Comment tidy

Past tense is wrong for a comment before some action.

* elf32-ppc.c (ppc_elf_adjust_dynamic_symbol): Comment tidy.
* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise.
* elfnn-aarch64.c (elfNN_aarch64_adjust_dynamic_symbol): Likewise.

6 years agoAutomatic date update in version.in
GDB Administrator [Wed, 6 Dec 2017 00:00:23 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoReally fix riscv shared library __global_pointer$ problem.
Jim Wilson [Tue, 5 Dec 2017 22:42:12 +0000 (14:42 -0800)]
Really fix riscv shared library __global_pointer$ problem.

ld/
* emulparams/elf32lriscv-defs.sh (SDATA_START_SYMBOLS): Remove HIDDEN.
Don't define __global_pointer$ when CREATE_SHLIB.
* testsuite/ld-riscv-elf/gp-hidden-64.rd,
* testsuite/ld-riscv-elf/gp-hidden-lib.rd,
* testsuite/ld-riscv-elf/gp-hidden-lib.s,
* testsuite/ld-riscv-elf/gp-hidden-ver-64.rd,
* testsuite/ld-riscv-elf/gp-hidden-ver.rd,
* testsuite/ld-riscv-elf/gp-hidden-ver.s,
* testsuite/ld-riscv-elf/gp-hidden-ver.ver,
* testsuite/ld-riscv-elf/gp-hidden.rd,
* testsuite/ld-riscv-elf/gp-hidden.s,
* testsuite/ld-riscv-elf/gp-hidden.sd: Delete.
* testsuite/ld-riscv-elf/gp-test-lib.sd,
* testsuite/ld-riscv-elf/gp-test.s,
* testsuite/ld-riscv-elf/gp-test.sd: New.
* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Rewrite gp tests.

6 years agoAddress review comments for the previous series
Simon Marchi [Tue, 5 Dec 2017 21:39:35 +0000 (16:39 -0500)]
Address review comments for the previous series

I failed at git and missed adding/lost changes on the wrong branch, the
result being that I didn't incorporate fixes resulting from Yao's review
comments.  This patch fixes that.

There are two places where we should use the unique pointer typedef, and
ChangeLog entries missing.

gdb/ChangeLog:

* target-descriptions.c (struct tdesc_feature) <registers>: Use
tdesc_reg_up typedef.
(struct target_desc) <features>: Use tdesc_feature_up typedef.

6 years agoSplit tdesc_type into multiple classes
Simon Marchi [Tue, 5 Dec 2017 21:30:28 +0000 (16:30 -0500)]
Split tdesc_type into multiple classes

This patch makes tdesc_type an abstract base class and creates three
subclasses:

- tdesc_type_builtin, for builtin types
- tdesc_type_vector, for vector types
- tdesc_type_with_fields, for struct, union, flag and enum types

This allows getting rid of the union in tdesc_type and to not allow the
std::vector separately.  I tried to go further and create separate
classes for struct, union, flag and enum, but it proved too difficult.
One problem is that from the point of the of the target description
code, the types tdesc_type_* are opaque (only forward-declared).
Therefore, it doesn't know about inheritance relationship between those
classes.  This makes it impossible to make functions that accept a
pointer to a base class and pass a pointer to a derived class, for
example.  I think this patch here is a good compromise, and if somebody
wants to improve things further, the door is open.

A make_gdb_type virtual pure method is added to tdesc_type, which
replaces the current tdesc_gdb_type function.  Calling this method on a
tdesc_type returns the corresponding built gdb type.

gdb/ChangeLog:

* target-descriptions.c (struct tdesc_type): Use default
destructor.
<u>: Remove.
<accept>: Remove.
(struct tdesc_type_builtin): New.
(struct tdesc_type_vector): New.
(struct tdesc_type_with_fields): New.
(tdesc_predefined_types): Change type to tdesc_type_builtin[].
(tdesc_gdb_type): Remove.
(tdesc_register_type): Adjust.
(tdesc_create_vector): Create tdesc_type_vector.
(tdesc_create_struct): Create tdesc_type_with_fields.
(tdesc_set_struct_size): Change parameter type.
(tdesc_create_union): Create tdesc_type_with_fields.
(tdesc_create_flags): Likewise.
(tdesc_create_enum): Likewise.
(tdesc_add_field): Change parameter type.
(tdesc_add_typed_bitfield): Likewise.
(tdesc_add_bitfield): Likewise.
(tdesc_add_flag): Likewise.
(tdesc_add_enum_value): Likewise.
(print_c_tdesc) <visit>: Remove overload with tdesc_type
parameter, add overloads for tdesc_type_builtin,
tdesc_type_with_fields and tdesc_type_vector.
<m_printed_type>: Remove.
<m_printed_element_type, m_printed_type_with_fields>: Add.
* target-descriptions.h (tdesc_create_enum): Change return type.
(tdesc_add_typed_bitfield): Change parameter type.
(tdesc_add_enum_value): Change parameter type.
* xml-tdesc.c (struct tdesc_parsing_data) <current_type>: Change
type to tdesc_type_with_fields.
(tdesc_start_struct): Adjust.
(tdesc_start_flags): Adjust.
(tdesc_start_enum): Adjust.
(tdesc_start_field): Adjust.
* arch/tdesc.h (struct tdesc_type_builtin): Forward-declare.
(struct tdesc_type_vector): Forward-declare.
(struct tdesc_type_with_fields): Forward-declare.
(tdesc_create_struct): Change return type.
(tdesc_create_union): Likewise.
(tdesc_create_flags): Likewise.
(tdesc_add_field): Change parameter type.
(tdesc_set_struct_size): Likewise.
(tdesc_add_bitfield): Likewise.
(tdesc_add_flag): Likewise.
* features: Re-generate C files.

gdb/gdbserver/ChangeLog:

* tdesc.c (struct tdesc_type): Change return type.
(tdesc_add_flag): Change parameter type.
(tdesc_add_bitfield): Likewise.
(tdesc_add_field): Likewise.
(tdesc_set_struct_size): Likewise.

6 years agoMake tdesc_arch_data::arch_regs an std::vector
Simon Marchi [Tue, 5 Dec 2017 21:30:27 +0000 (16:30 -0500)]
Make tdesc_arch_data::arch_regs an std::vector

Make tdesc_arch_data::arch_regs be an std::vector of tdesc_arch_reg
objects.

On particularity is that the tdesc_arch_data linked to a gdbarch is
allocated on the gdbarch's obstack.  To be safe, I did not change it and
called placement-new on the area returned by OBSTACK_ZALLOC.

gdb/ChangeLog:

* target-descriptions.c (tdesc_arch_reg): Remove typedef.
(struct tdesc_arch_reg): Add constructor.
(DEF_VEC_O (tdesc_arch_reg)): Remove.
(struct tdesc_arch_data): Initialize fields.
<arch_regs>: Change type to std::vector.
(target_find_description): Adjust.
(tdesc_find_type): Adjust.
(tdesc_data_init): Call tdesc_arch_data constructor.
(tdesc_data_alloc): Allocate tdesc_arch_data with new.
(tdesc_data_cleanup): Free data with delete.
(tdesc_numbered_register): Adjust.
(tdesc_find_arch_register): Adjust.
(tdesc_use_registers): Adjust.

6 years agoMake tdesc_type::u::u::fields an std::vector
Simon Marchi [Tue, 5 Dec 2017 21:30:26 +0000 (16:30 -0500)]
Make tdesc_type::u::u::fields an std::vector

This patch makes the tdesc_type::u::u::fields an std::vector of
tdesc_type_field.   The difficulty here is that the vector is part of a
union.  Because of this, I made fields a pointer to a vector, and
instantiate/destroy the vector if the type is one that uses this member
of the union

The field tdesc_type_field::name is changed to an std::string at the
same time.

gdb/ChangeLog:

* target-descriptions.c (tdesc_type_field): Remove typedef.
(DEF_VEC_O (tdesc_type_field)): Remove.
(struct tdesc_type_field): Add constructor.
<name>: Change type to std::string.
(struct tdesc_type) <tdesc_type>: Instantiate vector if the type
kind uses it.
<~tdesc_type>: Destroy vector if the type kind uses it.
<u::u::fields>: Change type to std::vector.
(tdesc_gdb_type): Adjust.
(tdesc_add_field): Adjust.
(tdesc_add_typed_bitfield): Adjust.
(tdesc_add_field): Adjust.
(tdesc_add_enum_value): Adjust.
(class print_c_tdesc) <visit>: Adjust.

6 years agoMake tdesc_type::name an std::string
Simon Marchi [Tue, 5 Dec 2017 21:30:26 +0000 (16:30 -0500)]
Make tdesc_type::name an std::string

This patch makes tdesc_type::name an std::string.  This way, we don't
need to free it manually in ~tdesc_type.  I think the comment on top of
name is not correct, the string is always malloc'ed.

gdb/ChangeLog:

* target-descriptions.c (struct tdesc_type) <name>: Change type
to std::string.
<~tdesc_type>: Don't manually free name.
<operator==>: Adjust.
(tdesc_named_type): Adjust.
(tdesc_find_type): Adjust.
(tdesc_gdb_type): Adjust.
(class print_c_tdesc) <visit>: Adjust.

6 years agoMake tdesc_feature::types an std::vector
Simon Marchi [Tue, 5 Dec 2017 21:30:25 +0000 (16:30 -0500)]
Make tdesc_feature::types an std::vector

This patch makes tdesc_feature::types an std::vector of unique_ptr of
tdesc_type.  This way, we don't need to manually free the objects and
the vector in ~tdesc_feature.

gdb/ChangeLog:

* target-descriptions.c (tdesc_type_p): Remove typedef.
(DEF_VEC_P (tdesc_type_p)): Remove.
(struct tdesc_feature) <types>: Change type to std::vector.
<~tdesc_feature>: Replace with default implementation.
<accept>: Adjust.
(tdesc_named_type): Adjust.
(tdesc_create_vector): Adjust.
(tdesc_create_struct): Adjust.
(tdesc_create_union): Adjust.
(tdesc_create_flags): Adjust.
(tdesc_create_enum): Adjust.

6 years agoMake tdesc_reg string fields std::string
Simon Marchi [Tue, 5 Dec 2017 21:30:25 +0000 (16:30 -0500)]
Make tdesc_reg string fields std::string

Make the name, group and type fields of tdesc_reg std::strings.  This
way, we don't have to manually free them in ~tdesc_reg.

Doing so results in a small change in the generated tdesc.  Instead of
passing an empty string for the group parameter of tdesc_create_reg, the
two modified tdesc now pass NULL.  The end result should be the same.

gdb/ChangeLog:

* target-descriptions.c (struct tdesc_reg) <tdesc_reg>: Change
type of name_ parameter, adjust to std::string change.
<name, group, type>: Change type to std::string.
<~tdesc_reg>: Replace with default implementation.
<operator==>: Adjust.
(tdesc_find_register_early): Adjust.
(tdesc_register_name): Adjust.
(tdesc_register_type): Adjust.
(tdesc_register_in_reggroup_p): Adjust.
(class print_c_tdesc) <visit>: Adjust.
(class print_c_feature) <visit>: Adjust.

6 years agoMake tdesc_feature::registers an std::vector
Simon Marchi [Tue, 5 Dec 2017 21:30:24 +0000 (16:30 -0500)]
Make tdesc_feature::registers an std::vector

This patch makes tdesc_feature::registers an std::vector of unique_ptr
to tdesc_reg.  This way, we don't have to manually free the tdesc_reg
objects and the vector in the tdesc_feature destructor.

gdb/ChangeLog:

* target-descriptions.c (tdesc_reg_p): Remove typedef.
(DEF_VEC_P (tdesc_reg_p)): Remove.
(struct tdesc_feature) <registers>: Change type to std::vector.
<~tdesc_feature>: Don't manually free registers.
<accept>: Adjust.
<operator==>: Adjust.
(tdesc_has_registers): Adjust.
(tdesc_find_register_early): Adjust.
(tdesc_use_registers): Adjust.
(tdesc_create_reg): Adjust.

6 years agoMake tdesc_feature::name an std::string
Simon Marchi [Tue, 5 Dec 2017 21:30:24 +0000 (16:30 -0500)]
Make tdesc_feature::name an std::string

... so we don't have to manually free it in ~tdesc_feature.

gdb/ChangeLog:

* target-descriptions.c (tdesc_feature) <name>: Change type to
std::string.
<~tdesc_feature>: Don't manually free name.
<operator==>: Adjust.
(tdesc_find_feature): Adjust.
(tdesc_feature_name): Adjust.
(class print_c_tdesc) <visit_pre>: Adjust.
(class print_c_feature) <visit_pre>: Adjust.

6 years agoMake target_desc::features an std::vector
Simon Marchi [Tue, 5 Dec 2017 21:30:23 +0000 (16:30 -0500)]
Make target_desc::features an std::vector

This patch makes target_desc to be a vector of unique_ptr to
tdesc_feature objects.  This way, we don't have to manually free the
features and the vector in the target_desc destructor.

gdb/ChangeLog:

* target-descriptions.c (tdesc_feature_p): Remove typedef.
(DEF_VEC_P (tdesc_feature_p)): Remove.
(struct target_desc) <features>: Change type to std::vector.
<~target_desc>: Replace with default implementation.
<accept>: Adjust.
<operator==>: Adjust.
(tdesc_has_registers): Adjust.
(tdesc_find_feature): Adjust.
(tdesc_use_registers): Adjust.
(tdesc_create_feature): Adjust.

6 years agoMake target_desc::compatible an std::vector
Simon Marchi [Tue, 5 Dec 2017 21:30:22 +0000 (16:30 -0500)]
Make target_desc::compatible an std::vector

This patch changes target_desc::compatible to be a vector of
bfd_arch_info *.  This way, we don't need to manually free the vector in
the target_desc destructor.

gdb/ChangeLog:

* target-descriptions.c (arch_p): Remove typedef.
(DEF_VEC_P (arch_p)): Remove.
(struct target_desc) <compatible>: Change type to std::vector.
<~target_desc>: Don't manually free compatible.
(tdesc_compatible_p): Adjust.
(tdesc_add_compatible): Adjust.
(class print_c_tdesc) <visit_pre>: Adjust.

6 years agoMake target_desc::properties an std::vector
Simon Marchi [Tue, 5 Dec 2017 21:30:22 +0000 (16:30 -0500)]
Make target_desc::properties an std::vector

This patch changes target_desc::properties to be a vector of property
objects.  This way, we don't need to manually free the property members
as well as the property objects themselves.

gdb/ChangeLog:

* target-descriptions.c (property_s): Remove typedef.
(DEF_VEC_O (property_s)): Remove.
(struct target_desc) <properties>: Make an std::vector.
<~target_desc>: Don't manually free properties.
(tdesc_property): Adjust.
(set_tdesc_property): Adjust.
(class print_c_tdesc) <visit_pre>: Adjust.

6 years agoRedefine gdb_static_assert as static_assert
Simon Marchi [Tue, 5 Dec 2017 21:15:08 +0000 (16:15 -0500)]
Redefine gdb_static_assert as static_assert

Since we use C++11, we can use static_assert instead doing the trick
that makes a negative-sized array if the expression is false.
static_assert is built in the language and gives clearer error messages.

To avoid modifying the usages of gdb_static_assert, redefine
gdb_static_assert in terms of static_assert, passing an empty message.
If we want to add an assert with a message, it's always possible to use
static_assert directly.

gdb/ChangeLog:

* common/gdb_assert.h (gdb_static_assert): Redefine using
static_assert.

6 years agoRemove some unused variables
Simon Marchi [Tue, 5 Dec 2017 21:05:34 +0000 (16:05 -0500)]
Remove some unused variables

This patch removes some unused variables, found with -Wunused.  I have
not removed everything reported by -Wunused, because some expressions
such as

  struct type *arg_type = check_typedef (value_type);

in bfin-tdep.c could have an unexpected but important side-effect.  I
removed others that I considered more low-risk, such as:

  struct gdbarch *gdbarch = get_objfile_arch (objfile);

I tested building with Python 2/Python 3/no Python, with/without expat,
with/without libipt and with/without babeltrace.

gdb/ChangeLog:

* ada-lang.c (ada_collect_symbol_completion_matches): Remove
unused variables.
(ada_is_redundant_range_encoding): Likewise.
* ada-varobj.c (ada_varobj_get_value_of_array_variable):
Likewise.
* alpha-tdep.c (alpha_software_single_step): Likewise.
* arm-tdep.c (_initialize_arm_tdep): Likewise.
* auto-load.c (info_auto_load_cmd): Likewise.
* break-catch-syscall.c (insert_catch_syscall): Likewise.
(remove_catch_syscall): Likewise.
* breakpoint.c (condition_completer): Likewise.
(clear_command): Likewise.
(update_breakpoint_locations): Likewise.
* btrace.c (btrace_disable): Likewise.
(btrace_teardown): Likewise.
(btrace_maint_update_pt_packets): Likewise.
(maint_btrace_clear_cmd): Likewise.
* cli/cli-decode.c (lookup_cmd_1): Likewise.
(lookup_cmd_composition): Likewise.
* cli/cli-dump.c (scan_filename): Likewise.
(restore_command): Likewise.
* compile/compile-loc2c.c (compute_stack_depth): Likewise.
* compile/compile-object-load.c (compile_object_load): Likewise.
* compile/compile-object-run.c (compile_object_run): Likewise.
* compile/compile.c (compile_to_object): Likewise.
* completer.c (filename_completer): Likewise.
(complete_files_symbols): Likewise.
(complete_expression): Likewise.
* corelow.c (core_open): Likewise.
* ctf.c (ctf_start): Likewise.
(ctf_write_status): Likewise.
(ctf_write_uploaded_tsv): Likewise.
(ctf_write_definition_end): Likewise.
(ctf_open_dir): Likewise.
(ctf_xfer_partial): Likewise.
(ctf_trace_find): Likewise.
* disasm.c (gdb_pretty_print_disassembler::pretty_print_insn):
Likewise.
* dwarf2loc.c (allocate_piece_closure): Likewise.
(indirect_pieced_value): Likewise.
(dwarf2_evaluate_loc_desc_full): Likewise.
* dwarf2read.c (dw2_expand_marked_cus): Likewise.
(dw2_expand_symtabs_matching): Likewise.
(dw2_map_symbol_filenames): Likewise.
(read_and_check_comp_unit_head): Likewise.
(read_cutu_die_from_dwo): Likewise.
(lookup_dwo_unit): Likewise.
(read_comp_units_from_section): Likewise.
(dwarf2_compute_name): Likewise.
(handle_DW_AT_stmt_list): Likewise.
(create_cus_hash_table): Likewise.
(create_dwp_v2_section): Likewise.
(dwarf2_rnglists_process): Likewise.
(dwarf2_ranges_process): Likewise.
(dwarf2_record_block_ranges): Likewise.
(is_vtable_name): Likewise.
(read_formatted_entries): Likewise.
(skip_form_bytes): Likewise.
* elfread.c (elf_symtab_read): Likewise.
* exec.c (exec_file_command): Likewise.
* f-valprint.c (f_val_print): Likewise.
(info_common_command_for_block): Likewise.
* guile/guile.c (initialize_scheme_side): Likewise.
* guile/scm-breakpoint.c (gdbscm_breakpoint_commands): Likewise.
* guile/scm-cmd.c (cmdscm_completer): Likewise.
(gdbscm_register_command_x): Likewise.
* guile/scm-frame.c (gdbscm_frame_read_var): Likewise.
* guile/scm-param.c (gdbscm_parameter_value): Likewise.
* guile/scm-ports.c (file_port_magic): Likewise.
* guile/scm-pretty-print.c (ppscm_search_pp_list): Likewise.
(ppscm_pretty_print_one_value): Likewise.
(ppscm_print_children): Likewise.
* guile/scm-string.c (gdbscm_string_to_argv): Likewise.
* guile/scm-symtab.c (gdbscm_sal_symtab): Likewise.
* guile/scm-type.c (gdbscm_type_next_field_x): Likewise.
* guile/scm-utils.c (gdbscm_parse_function_args): Likewise.
* i386-tdep.c (i386_register_reggroup_p): Likewise.
* infcmd.c (run_command_1): Likewise.
(until_next_fsm_clean_up): Likewise.
* linespec.c (linespec_complete): Likewise.
(find_label_symbols): Likewise.
* m2-valprint.c (m2_val_print): Likewise.
* memattr.c (require_user_regions): Likewise.
(lookup_mem_region): Likewise.
(disable_mem_command): Likewise.
(mem_delete): Likewise.
* mep-tdep.c (mep_register_name): Likewise.
(mep_analyze_prologue): Likewise.
* mi/mi-cmd-file.c (mi_cmd_file_list_shared_libraries): Likewise.
* mi/mi-interp.c (mi_on_sync_execution_done): Likewise.
* mi/mi-main.c (mi_cmd_trace_frame_collected): Likewise.
* microblaze-linux-tdep.c (microblaze_linux_init_abi): Likewise.
* minidebug.c (lzma_open): Likewise.
* minsyms.c (lookup_minimal_symbol): Likewise.
* mips-linux-tdep.c (mips64_fill_fpregset): Likewise.
* mips-tdep.c (mips_stub_frame_sniffer): Likewise.
(mips_o64_return_value): Likewise.
(mips_single_step_through_delay): Likewise.
(_initialize_mips_tdep): Likewise.
* nios2-tdep.c (nios2_push_dummy_call): Likewise.
(nios2_software_single_step): Likewise.
* parse.c (find_minsym_type_and_address): Likewise.
* psymtab.c (psym_relocate): Likewise.
* python/py-breakpoint.c (bppy_get_commands): Likewise.
(gdbpy_breakpoint_modified): Likewise.
* python/py-infevents.c (create_inferior_call_event_object):
Likewise.
* python/py-record-btrace.c (btpy_list_item): Likewise.
* python/py-type.c (typy_str): Likewise.
* python/py-value.c (valpy_call): Likewise.
* python/python.c (do_start_initialization): Likewise.
* record-btrace.c (record_btrace_insn_history_range): Likewise.
(record_btrace_call_history_range): Likewise.
(record_btrace_record_method): Likewise.
(record_btrace_xfer_partial): Likewise.
(btrace_get_frame_function): Likewise.
* record-full.c (record_full_open): Likewise.
* record.c (get_context_size): Likewise.
* registry.h (DEFINE_REGISTRY): Likewise.
* remote-fileio.c (remote_fileio_request): Likewise.
* remote.c (remote_update_thread_list): Likewise.
(remote_check_symbols): Likewise.
(remote_commit_resume): Likewise.
(remote_interrupt): Likewise.
(remote_insert_breakpoint): Likewise.
(compare_sections_command): Likewise.
* rust-exp.y (super_name): Likewise.
(lex_string): Likewise.
(convert_ast_to_type): Likewise.
(convert_ast_to_expression): Likewise.
* rust-lang.c (rust_print_struct_def): Likewise.
(rust_print_type): Likewise.
(rust_evaluate_subexp): Likewise.
* rx-tdep.c (rx_register_type): Likewise.
* ser-event.c (serial_event_clear): Likewise.
* serial.c (serial_open): Likewise.
* spu-tdep.c (spu_overlay_new_objfile): Likewise.
* symfile.c (section_is_overlay): Likewise.
(overlay_unmapped_address): Likewise.
(overlay_mapped_address): Likewise.
(simple_overlay_update_1): Likewise.
(simple_overlay_update): Likewise.
* symtab.c (symbol_find_demangled_name): Likewise.
(search_symbols): Likewise.
* target-descriptions.c (tdesc_predefined_type): Likewise.
* target.c (target_commit_resume): Likewise.
* thread.c (print_selected_thread_frame): Likewise.
* top.c (new_ui_command): Likewise.
(gdb_readline_no_editing): Likewise.
* tracefile-tfile.c (tfile_open): Likewise.
* tracepoint.c (create_tsv_from_upload): Likewise.
* utils.c (quit): Likewise.
(defaulted_query): Likewise.
* valarith.c (value_concat): Likewise.
* xml-syscall.c (xml_list_syscalls_by_group): Likewise.
* xml-tdesc.c (target_fetch_description_xml): Likewise.
* xtensa-tdep.c (xtensa_pseudo_register_read): Likewise.
(xtensa_pseudo_register_write): Likewise.

gdb/gdbserver/ChangeLog:

* regcache.c (registers_to_string): Remove unused variable.

6 years agoRiscv shared libraries should not export __global_pointer$.
Jim Wilson [Tue, 5 Dec 2017 01:37:55 +0000 (17:37 -0800)]
Riscv shared libraries should not export __global_pointer$.

ld/
* emulparams/elf32lriscv-defs.sh (SDATA_START_SYMBOLS): Mark
__global_pointer$ as HIDDEN.
* testsuite/ld-riscv-elf/gp-hidden-64.rd: New.
* testsuite/ld-riscv-elf/gp-hidden-lib.rd: New.
* testsuite/ld-riscv-elf/gp-hidden-lib.s: New.
* testsuite/ld-riscv-elf/gp-hidden-ver-64.rd: New.
* testsuite/ld-riscv-elf/gp-hidden-ver.rd: New.
* testsuite/ld-riscv-elf/gp-hidden-ver.s: New.
* testsuite/ld-riscv-elf/gp-hidder-ver.ver: New.
* testsuite/ld-riscv-elf/gp-hidden.rd: New.
* testsuite/ld-riscv-elf/gp-hidden.s: New.
* testsuite/ld-riscv-elf/gp-hidden.sd: New.
* testsuite/ld-riscv-elf/ld-riscv-elf.exp: Change riscv to riscv*.
Run the new tests with run_ld_link_tests.

6 years agoAutomatic date update in version.in
GDB Administrator [Tue, 5 Dec 2017 00:00:22 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoExtend gdb.core/coredump-filter.exp to test dump-excluded-mappings.
Sergio Lopez [Mon, 4 Dec 2017 08:17:16 +0000 (09:17 +0100)]
Extend gdb.core/coredump-filter.exp to test dump-excluded-mappings.

gdb/testsuite/ChangeLog:
2017-11-30  Sergio Lopez  <slp@redhat.com>

* gdb.core/coredump-filter.exp: Extend test to verify
the functionality of the dump-excluded-mappings command.

6 years agoDocument the new "-a" command line option for gcore
Sergio Lopez [Mon, 4 Dec 2017 08:17:15 +0000 (09:17 +0100)]
Document the new "-a" command line option for gcore

gdb/ChangeLog:
2017-11-29  Sergio Lopez  <slp@redhat.com>

* NEWS (Changes since GDB 8.0): Announce new "-a"
command line option for gcore.

gdb/doc/ChangeLog:
2017-11-29  Sergio Lopez  <slp@redhat.com>

* gdb.texinfo (gcore man): Document new "-a" command line option.

6 years agoImplement "-a" command line option for gcore
Sergio Lopez [Mon, 4 Dec 2017 08:17:14 +0000 (09:17 +0100)]
Implement "-a" command line option for gcore

With the new "-a" command line option, the user may request gcore to
actually dump all present memory mappings. The actual effect of this
argument is OS dependent.

On GNU/Linux, it will disable use-coredump-filter and enable
dump-excluded-mappings.

gdb/ChangeLog:
2017-11-29  Sergio Lopez  <slp@redhat.com>

* gcore.in: Add "-a" command line option for instructing gdb to
dump all memory mappings (OS dependent).

6 years agoDocument new {set,show} dump-excluded-mappings commands.
Sergio Lopez [Mon, 4 Dec 2017 08:17:13 +0000 (09:17 +0100)]
Document new {set,show} dump-excluded-mappings commands.

gdb/ChangeLog:
2017-11-29  Sergio Lopez  <slp@redhat.com>

* NEWS (Changes since GDB 8.0): Announce {set,show}
dump_excluded_mappings commands.

gdb/doc/ChangeLog:
2017-11-29  Sergio Lopez  <slp@redhat.com>

* gdb.texinfo (gcore): Mention new {set,show}
dump-excluded-mappings commands.
(set dump-excluded-mappings): Document new command.

6 years agoImplement 'set dump-excluded-mappings' command
Sergio Lopez [Mon, 4 Dec 2017 08:17:12 +0000 (09:17 +0100)]
Implement 'set dump-excluded-mappings' command

Commit df8411da087dc05481926f4c4a82deabc5bc3859 implemented support for
checking /proc/PID/coredump_filter, and also changed gcore behavior to
unconditionally honor the VM_DONTDUMP flag, preventing sections marked
as such for being dumped into the core file.

This patch implements the 'set dump-excluded-mappings' command for
instructing gdb to ignore the VM_DONTDUMP flag. Combined with 'set
use-coredump-filter', this allows the user to restore the old behavior,
dumping all sections (except the ones marked as IO) unconditionally.

gdb/Changelog:
2017-11-29  Sergio Lopez  <slp@redhat.com>

* linux-tdep.c (dump_excluded_mappings): New variable.
(dump_mapping_p): Use dump_excluded_mappings variable.
(_initialize_linux_tdep): New command 'set dump_excluded_mappings'.

6 years agoUpdate manual for Rust change
Tom Tromey [Fri, 1 Dec 2017 21:16:33 +0000 (14:16 -0700)]
Update manual for Rust change

I realized today that a recent change to the Rust support required an
update to the manual; and so I updated NEWS as well.

2017-12-04  Tom Tromey  <tom@tromey.com>

* NEWS: Mention Rust trait object inspection.

2017-12-04  Tom Tromey  <tom@tromey.com>

* gdb.texinfo (Rust): Update trait object status

6 years agoFix displaced-stepping RIP-relative VEX-encoded instructions (AVX) (PR gdb/22499)
Pedro Alves [Mon, 4 Dec 2017 15:59:20 +0000 (15:59 +0000)]
Fix displaced-stepping RIP-relative VEX-encoded instructions (AVX) (PR gdb/22499)

PR gdb/22499 is about a latent bug exposed by the switch to "maint set
target-non-stop on" by default on x86-64 GNU/Linux, a while ago.  With
that on, GDB is also preferring to use displaced-stepping by default.

The testcase in the bug is failing because GDB ends up incorrectly
displaced-stepping over a RIP-relative VEX-encoded instruction, like
this:

 0x00000000004007f5 <+15>:    c5 fb 10 05 8b 01 00 00 vmovsd 0x18b(%rip),%xmm0        # 0x400988

While RIP-relative instructions need adjustment when relocated to the
scratch pad, GDB ends up just copying VEX-encoded instructions to the
scratch pad unmodified, with the end result that the inferior ends up
executing an instruction that fetches/writes memory from the wrong
address...

This patch teaches GDB about the VEX-encoding prefixes, fixing the
problem, and adds a testcase that fails without the GDB fix.

I think we may need a similar treatment for EVEX-encoded instructions,
but I didn't address that simply because I couldn't find any
EVEX-encoded RIP-relative instruction in the gas testsuite.  In any
case, this commit is forward progress as-is already.

gdb/ChangeLog:
2017-12-04  Pedro Alves  <palves@redhat.com>

PR gdb/22499
* amd64-tdep.c (amd64_insn::rex_offset): Rename to...
(amd64_insn::enc_prefix_offset): ... this, and tweak comment.
(vex2_prefix_p, vex3_prefix_p): New functions.
(amd64_get_insn_details): Adjust to rename.  Also skip VEX2 and
VEX3 prefixes.
(fixup_riprel): Set VEX3.!B.

gdb/testsuite/ChangeLog:
2017-12-04  Pedro Alves  <palves@redhat.com>

PR gdb/22499
* gdb.arch/amd64-disp-step-avx.S: New file.
* gdb.arch/amd64-disp-step-avx.exp: New file.

6 years agox86 map file textrel
Alan Modra [Sat, 2 Dec 2017 04:18:50 +0000 (14:48 +1030)]
x86 map file textrel

bfd/
* elfxx-x86.c (readonly_dynrelocs): New function.
(maybe_set_textrel): New function.  Always prints via minfo and
correct "readonly" to "read-only" in warning message., replacing..
(_bfd_x86_elf_readonly_dynrelocs): ..this.
(_bfd_x86_elf_size_dynamic_sections): Correct "readonly" to
"read-only" in warning message.  Formatting.
(_bfd_x86_elf_adjust_dynamic_symbol): Use readonly_dynrelocs.
* linker.c (bfd_link_hash_traverse): Comment typo fix.
ld/
* testsuite/ld-i386/pr17935-1.d: Adjust expected error.
* testsuite/ld-i386/pr17935-2.d: Likewise.
* testsuite/ld-x86-64/pr17935-1.d: Likewise.
* testsuite/ld-x86-64/pr17935-2.d: Likewise.

6 years agoDocumentation fix
Alan Modra [Mon, 4 Dec 2017 11:55:45 +0000 (22:25 +1030)]
Documentation fix

PR 22544
* doc/as.texinfo (8byte): Correct.

6 years agoAutomatic date update in version.in
GDB Administrator [Mon, 4 Dec 2017 00:00:26 +0000 (00:00 +0000)]
Automatic date update in version.in

6 years agoRun powerpc vle gas tests for all powerpc ELF targets
Alan Modra [Sun, 3 Dec 2017 23:42:46 +0000 (10:12 +1030)]
Run powerpc vle gas tests for all powerpc ELF targets

* testsuite/gas/ppc/ppc.exp: Don't exclude VLE tests when little-endian.
* testsuite/gas/ppc/efs.d: Add -mbig to assembler options.
* testsuite/gas/ppc/efs2.d: Likewise.
* testsuite/gas/ppc/lsp-checks.d: Likewise.
* testsuite/gas/ppc/lsp.d: Likewise.
* testsuite/gas/ppc/spe.d: Likewise.
* testsuite/gas/ppc/spe2-checks.d: Likewise.
* testsuite/gas/ppc/spe2.d: Likewise.
* testsuite/gas/ppc/spe_ambiguous.d: Likewise.
* testsuite/gas/ppc/vle-mult-ld-st-insns.d: Likewise.
* testsuite/gas/ppc/vle-reloc.d: Likewise.
* testsuite/gas/ppc/vle-simple-1.d: Likewise.
* testsuite/gas/ppc/vle-simple-2.d: Likewise.
* testsuite/gas/ppc/vle-simple-3.d: Likewise.
* testsuite/gas/ppc/vle-simple-4.d: Likewise.
* testsuite/gas/ppc/vle-simple-5.d: Likewise.
* testsuite/gas/ppc/vle-simple-6.d: Likewise.
* testsuite/gas/ppc/vle.d: Likewise.

6 years agoModify ppceabi ld tests to run on all powerpc ELF targets
Alan Modra [Sun, 3 Dec 2017 22:08:35 +0000 (08:38 +1030)]
Modify ppceabi ld tests to run on all powerpc ELF targets

* testsuite/ld-powerpc/powerpc.exp (ppceabitests): Add -a32 -mbig
to assembler options, and -melf32ppc to linker options.  Always
run these tests.

6 years agoFix for texinfo 4.8.
Jim Wilson [Sun, 3 Dec 2017 23:11:07 +0000 (15:11 -0800)]
Fix for texinfo 4.8.

gas/
* doc/c-riscv.texi (RISC-V-Directives): Move @section immediately after
@node.

6 years agoRemove mem_region_vector typedef
Simon Marchi [Sun, 3 Dec 2017 18:01:03 +0000 (13:01 -0500)]
Remove mem_region_vector typedef

Now that make-target-delegates understands namespaces and templates,
this typedef is no longer useful.

gdb/ChangeLog:

* target.h (mem_region_vector): Remove.
(struct target_ops) <to_memory_map>: Change return type to
std::vector<mem_region>.
* target-debug.h (target_debug_print_mem_region_vector): Rename
to ...
(target_debug_print_std_vector_mem_region): ... this.
* target-delegates.c: Re-generate.

6 years agoMake make-target-delegates grok namespace scope op and template params
Pedro Alves [Sun, 3 Dec 2017 17:50:43 +0000 (12:50 -0500)]
Make make-target-delegates grok namespace scope op and template params

The next patch will want to use gdb::array_view<int> as parameter type
of a target_ops method.  However, that runs into a
make-target-delegates limitation: target_debug_foo calls in
target-delegates.c for parameters/return types with namespace scope
operators ("::") or template parameters, end up looking like:

 @@ -1313,9 +1313,7 @@ debug_set_syscall_catchpoint (struct target_ops *self, int arg1, int arg2, int a
    fputs_unfiltered (", ", gdb_stdlog);
    target_debug_print_int (arg3);
    fputs_unfiltered (", ", gdb_stdlog);
 -  target_debug_print_int (arg4);
 -  fputs_unfiltered (", ", gdb_stdlog);
 -  target_debug_print_int_p (arg5);
 +  target_debug_print_gdb::array_view<const_int> (arg4);

which obviously isn't something that compiles.  The problem is that
make-target-delegates wasn't ever taught that '::', '<', and '>' can
appear in parameter/return types.  You could work around it by hidding
the unsupported characters behind a typedef in the target method
declaration, or by using an explicit TARGET_DEBUG_PRINTER, but it's
better to just remove the limitation.

While at it, also fix an "abuse" of reserved identifiers.

gdb/ChangeLog:

* make-target-delegates (munge_type): Also munge '<', '>', and
':'.  Avoid double underscores in identifiers, and trailing
underscores.
* target-debug.h
(target_debug_print_VEC_static_tracepoint_marker_p__p): Rename to
...
(target_debug_print_VEC_static_tracepoint_marker_p_p): ... this.
* target-delegates.c: Regenerate.

6 years agoFix gdb.threads/process-dies-while-detaching.exp
Pedro Alves [Sun, 3 Dec 2017 15:32:08 +0000 (15:32 +0000)]
Fix gdb.threads/process-dies-while-detaching.exp

I noticed [1] a test bug in gdb.threads/process-dies-while-detaching.exp.
Simplified, the test code in question looks somewhat like this:

~~~
  # Detach from a process, and ensure that it exits after detaching.
  # This relies on inferior I/O.

  proc detach_and_expect_exit {test} {

      gdb_test_multiple "detach" $test ....

      set saw_prompt 0
      set saw_inf_exit 0
      while { !$saw_prompt && !$saw_inf_exit } {
          gdb_test_multiple "" $test {
              -re "exited, status=0" {
                  set saw_inf_exit 1
              }
              -re "$gdb_prompt " {
                  set saw_prompt 1
              }
          }
      }

      pass $test
  }
~~~

The bug is in the while loop's condition.  We want to make sure we see
both the inferior output and the prompt, so the loop's test should be:

   -    while { !$saw_prompt && !$saw_inf_exit } {
   +    while { !$saw_prompt || !$saw_inf_exit } {

If we just fix that, the test starts failing though, because it
exposes a couple latent problems:

- When called from test_detach_killed_outside, the parent doesn't
  print "exited, status=0", because in that case the child dies with a
  signal, and so detach_and_expect_exit times out.

  Fix it by making the parent print "signaled, sig=9" in that case,
  and have the .exp expect it.

- When testing against --target_board=native-gdbserver, sometimes we'd
  get this:

    ERROR: Process no longer exists
    ERROR: : spawn id exp9 not open
while executing
    "expect {
    -i exp8 -timeout 220
    -i $server_spawn_id
    eof {
pass $test
wait -i $server_spawn_id
unset server_spawn_id
    }
    timeout {
       ..."
("uplevel" body line 1)
invoked from within
    "uplevel $body" NONE : spawn id exp9 not open

  The problem is that:

   - inferior_spawn_id and server_spawn_id are the same when testing
     with gdbserver.
   - gdbserver exits after "detach", so we get an eof for
     $inferior_spawn_id in the loop in detach_and_expect_exit.
     That's the first "ERROR: Process no longer exists".
   - and then when we reach test_server_exit, server_spawn_id
     is already closed (because server_spawn_id==inferior_spawn_id).

  To handle this, make the loop in detach_and_expect_exit use an
  indirect spawn id list and remove $inferior_spawn_id from the list
  as soon as we got the inferior output we're expecting, so that the
  "eof" is left unprocessed until we reach test_server_exit.

[1] I changed GDB in a way that should have made the test fail, but it
    didn't.

gdb/testsuite/ChangeLog:
2017-12-03  Pedro Alves  <palves@redhat.com>

* gdb.threads/process-dies-while-detaching.c: Include <errno.h>
and <string.h>.
(parent_function): Print distinct messages when waitpid fails, or
the child exits with a signal, or the child exits for an unhandled
reason.
* gdb.threads/process-dies-while-detaching.exp
(detach_and_expect_exit): New 'inf_output_re' parameter and use
it.  Wait for both inferior output and GDB's prompt.  Use an
indirect spawn id list.
(do_detach): New parameter 'child_exit'.  Use it to compute
expected inferior output.
(test_detach, test_detach_watch, test_detach_killed_outside):
Adjust to pass down the expected child exit kind.

6 years agoFix "FAIL: VLE relocations 3"
Alan Modra [Sun, 3 Dec 2017 11:21:45 +0000 (21:51 +1030)]
Fix "FAIL: VLE relocations 3"

Correct sign extension.

* ppc-opc.c (extract_li20): Rewrite.

6 years agoRemove for_each_inferior_with_data
Simon Marchi [Sun, 3 Dec 2017 01:36:46 +0000 (20:36 -0500)]
Remove for_each_inferior_with_data

Remove for_each_inferior_with_data, replacing its sole usage with
for_each_thread.

gdb/gdbserver/ChangeLog:

* inferiors.c (for_each_inferior_with_data): Remove.
* inferiors.h (for_each_inferior_with_data): Remove.
* server.c (handle_qxfer_threads_worker): Change parameter type.
(handle_qxfer_threads_proper): Use for_each_thread.

6 years agoRemove for_each_inferior
Simon Marchi [Sun, 3 Dec 2017 01:37:53 +0000 (20:37 -0500)]
Remove for_each_inferior

This patch removes for_each_inferior, replacing all its usages with
for_each_thread.

gdb/gdbserver/ChangeLog:

* inferiors.c (for_each_inferior): Remove.
(clear_inferiors): Use for_each_thread.
* inferiors.h (for_each_inferior): Remove.
* linux-low.c (linux_wait_for_event_filtered): Use
for_each_thread.
(linux_stabilize_threads): Likewise.
* regcache.c (regcache_release): Likewise.
* server.c (gdb_wants_all_threads_stopped): Likewise.
(clear_pending_status_callback): Remove.
(handle_status): Use for_each_thread.
(captured_main): Likewise.
* win32-low.c (child_init_thread_list): Likewise.
(win32_clear_inferiors): Likewise.
(fake_breakpoint_event): Likewise.

6 years agoRemove find_inferior
Simon Marchi [Sun, 3 Dec 2017 01:36:45 +0000 (20:36 -0500)]
Remove find_inferior

All the usages of find_inferior were removed, so the function itself can
be removed.

gdb/gdbserver/ChangeLog:

* inferiors.h (find_inferior): Remove.
* inferiors.c (find_inferior): Remove.

6 years agoUpdate comments
Simon Marchi [Sun, 3 Dec 2017 01:36:44 +0000 (20:36 -0500)]
Update comments

These functions were modified in the previous patch series, but I forgot
to update some comments.

gdb/gdbserver/ChangeLog:

* linux-low.c (resume_status_pending_p): Update comment.
(need_step_over_p): Update comment.

6 years agoRemove usages of find_inferior that call proceed_one_lwp
Simon Marchi [Sun, 3 Dec 2017 01:36:43 +0000 (20:36 -0500)]
Remove usages of find_inferior that call proceed_one_lwp

Replace with for_each_thread.

gdb/gdbserver/ChangeLog:

* linux-low.c (proceed_one_lwp): Return void, change parameter
type.
(unsuspend_and_proceed_one_lwp): Likewise.
(proceed_all_lwps): Use for_each_thread.
(unstop_all_lwps): Likewise.

6 years agoRemove usage of find_inferior in linux_resume
Simon Marchi [Sun, 3 Dec 2017 01:36:42 +0000 (20:36 -0500)]
Remove usage of find_inferior in linux_resume

Replace with for_each_thread.

gdb/gdbserver/ChangeLog:

* linux-low.c (linux_resume_one_thread): Return void, take
parameter directly.
(linux_resume): Use for_each_thread.

6 years agoRemove usages of find_inferior in stop_all_lwps
Simon Marchi [Sun, 3 Dec 2017 01:36:41 +0000 (20:36 -0500)]
Remove usages of find_inferior in stop_all_lwps

Replace with for_each_thread.

gdb/gdbserver/ChangeLog:

* linux-low.c (send_sigstop_callback): Return void, change
parameter type.  Rename to...
(send_sigstop): ... this.
(suspend_and_send_sigstop_callback): Return void, change parameter
type.  Rename to...
(suspend_and_send_sigstop): ... this.
(stop_all_lwps): Use for_each_thread.

6 years agoRemove usage of find_inferior in linux_stabilize_threads
Simon Marchi [Sun, 3 Dec 2017 01:36:41 +0000 (20:36 -0500)]
Remove usage of find_inferior in linux_stabilize_threads

Replace with find_thread.

gdb/gdbserver/ChangeLog:

* linux-low.c (lwp_running): Return bool, remove unused
argument.
(linux_stabilize_threads): Use find_thread.

6 years agoRemove usages of find_inferior in select_event_lwp
Simon Marchi [Sun, 3 Dec 2017 01:36:40 +0000 (20:36 -0500)]
Remove usages of find_inferior in select_event_lwp

Replace with find_thread/for_each_thread.  I inlined the callbacks,
because they are relatively simple.

gdb/gdbserver/ChangeLog:

* linux-low.c (select_singlestep_lwp_callback): Remove.
(count_events_callback): Remove.
(select_event_lwp_callback): Remove.
(select_event_lwp): Use find_thread/for_each_thread.

6 years agoRemove usages of find_inferior calling not_stopped_callback
Simon Marchi [Sun, 3 Dec 2017 01:36:39 +0000 (20:36 -0500)]
Remove usages of find_inferior calling not_stopped_callback

Replace with find_thread.  Writing a lambda inline in directly in the if
conditions would be a bit messy, so I chose to assign them to variables
instead.

gdb/gdbserver/ChangeLog:

* linux-low.c (not_stopped_callback): Return bool, take filter
argument directly.
(linux_wait_for_event_filtered): Use find_thread.
(linux_wait_1): Likewise.

6 years agoRemove usage of find_inferior in find_lwp_pid
Simon Marchi [Sun, 3 Dec 2017 01:36:38 +0000 (20:36 -0500)]
Remove usage of find_inferior in find_lwp_pid

Replace with find_thread.  We could almost use find_thread_ptid, except
that find_lwp_pid uses the pid of the input ptid of the lwp is 0, so the
behavior is not quite the same.

gdb/gdbserver/ChangeLog:

* linux-low.c (same_lwp): Remove.
(find_lwp_pid): Use find_thread.

6 years agoRemove usage of find_inferior in linux_mourn
Simon Marchi [Sun, 3 Dec 2017 01:36:37 +0000 (20:36 -0500)]
Remove usage of find_inferior in linux_mourn

Replace with for_each_thread with pid filtering.  The callback becomes
trivial enough that it's better to inline it.

gdb/gdbserver/ChangeLog:

* linux-low.c (delete_lwp_callback): Remove.
(linux_mourn): Use for_each_thread.

6 years agoRemove usage of find_inferior in linux_detach
Simon Marchi [Sun, 3 Dec 2017 01:36:36 +0000 (20:36 -0500)]
Remove usage of find_inferior in linux_detach

Replace with for_each_thread with pid filtering.

gdb/gdbserver/ChangeLog:

* linux-low.c (linux_detach_lwp_callback): Return void, remove
args parameter, don't check for pid.
(linux_detach): Use for_each_thread.

6 years agoRemove usage of find_inferior in last_thread_of_process_p
Simon Marchi [Sun, 3 Dec 2017 01:36:36 +0000 (20:36 -0500)]
Remove usage of find_inferior in last_thread_of_process_p

Replace it with find_thread.  I also modified the code a bit to use a
lambda and a boolean.

gdb/gdbserver/ChangeLog:

* linux-low.c (struct counter): Remove.
(second_thread_of_pid_p): Remove.
(last_thread_of_process_p): Use find_thread.