Commit Graph

93965 Commits

Author SHA1 Message Date
Simon Marchi 6f14adc558 Replace make_cleanup_restore_current_traceframe with RAII class
I put the constructor in tracepoint.c because it needs to read
traceframe_number, and I prefer to do that than to expose
traceframe_number.

gdb/ChangeLog:

	* tracepoint.c (struct current_traceframe_cleanup): Remove.
	(do_restore_current_traceframe_cleanup): Remove.
	(restore_current_traceframe_cleanup_dtor): Remove.
	(make_cleanup_restore_current_traceframe): Remove.
	(scoped_restore_current_traceframe::scoped_restore_current_traceframe):
	New.
	* tracepoint.h (struct scoped_restore_current_traceframe): New.
	* infrun.c (fetch_inferior_event): Use
	scoped_restore_current_traceframe.
2018-04-07 14:03:12 -04:00
Simon Marchi b2bdb8cf39 Make dwarf2_per_objfile::all_type_units an std::vector
Make all_type_units an std::vector, remove
n_type_units/n_allocated_type_units and some manual memory management.

gdb/ChangeLog:

	* dwarf2read.h (struct dwarf2_per_objfile) <n_type_units>:
	Remove.
	<n_allocated_type_units>: Remove.
	<all_type_units>: Change to std::vector.
	* dwarf2read.c (dwarf2_per_objfile::~dwarf2_per_objfile): Adjust
	to std::vector change.
	(dwarf2_per_objfile::get_cutu): Likewise.
	(dwarf2_per_objfile::get_tu): Likewise.
	(create_signatured_type_table_from_index): Likewise.
	(create_signatured_type_table_from_debug_names): Likewise.
	(dw2_symtab_iter_next): Likewise.
	(dw2_print_stats): Likewise.
	(dw2_expand_all_symtabs): Likewise.
	(dw2_expand_marked_cus): Likewise.
	(dw2_debug_names_iterator::next): Likewise.
	(dwarf2_initialize_objfile): Likewise.
	(add_signatured_type_cu_to_table): Likewise.
	(create_all_type_units): Likewise.
	(add_type_unit): Likewise.
	(struct tu_abbrev_offset): Add constructor.
	(build_type_psymtabs_1): Adjust to std::vector change.
	(print_tu_stats): Likewise.
	* dwarf-index-write.c (check_dwarf64_offsets): Likewise.
	(write_debug_names): Likewise.
2018-04-07 13:53:44 -04:00
Simon Marchi b76e467de3 Make dwarf2_per_objfile::all_comp_units an std::vector
Make all_comp_units an std::vector, remove n_comp_units and some manual
memory management.

gdb/ChangeLog:

	* dwarf2read.h (struct dwarf2_per_objfile) <all_comp_units>: Likewise.
	Make an std::vector.
	<n_comp_units>: Remove.
	* dwarf2read.c (dwarf2_per_objfile::~dwarf2_per_objfile): Adjust
	to std::vector change.
	(dwarf2_per_objfile::get_cutu): Likewise.
	(dwarf2_per_objfile::get_cu): Likewise.
	(create_cus_from_index): Likewise.
	(create_addrmap_from_index): Likewise.
	(create_addrmap_from_aranges): Likewise.
	(dwarf2_read_index): Likewise.
	(dw2_find_last_source_symtab): Likewise.
	(dw2_map_symtabs_matching_filename): Likewise.
	(dw2_symtab_iter_next): Likewise.
	(dw2_print_stats): Likewise.
	(dw2_expand_all_symtabs): Likewise.
	(dw2_expand_symtabs_with_fullname): Likewise.
	(dw2_expand_marked_cus): Likewise.
	(dw2_map_symbol_filenames): Likewise.
	(create_cus_from_debug_names): Likewise.
	(dwarf2_read_debug_names): Likewise.
	(dw2_debug_names_iterator::next): Likewise.
	(dwarf2_initialize_objfile): Likewise.
	(set_partial_user): Likewise.
	(dwarf2_build_psymtabs_hard): Likewise.
	(read_comp_units_from_section): Remove arguments, adjust to
	std::vector change.
	(create_all_comp_units): Adjust to std::vector and
	read_comp_units_from_section changes.
	(dwarf2_find_containing_comp_unit): Adjust to std::vector
	change.
	* dwarf-index-write.c (check_dwarf64_offsets): Likewise.
	(psyms_seen_size): Likewise.
	(write_gdbindex): Likewise.
	(write_debug_names): Likewise.
2018-04-07 13:53:43 -04:00
Simon Marchi 12359b5e8f Remove some usages of get_dwarf2_per_objfile
This patch removes some usages of get_dwarf2_per_objfile, where we can
get hold of the dwarf2_per_objfile object in a simpler way.  For
example, it's simpler (and slightly less work) to pass
dwarf2_per_objfile and get the objfile from it than to pass the objfile
and call get_dwarf2_per_objfile.

Ideally, get_dwarf2_per_objfile should only be used in the entry points
of the dwarf2 code, where we receive an objfile.

gdb/ChangeLog:

	* dwarf2read.c (create_cus_from_index_list): Replace objfile arg
	with dwarf2_per_objfile.
	(create_cus_from_index): Likewise.
	(create_signatured_type_table_from_index): Likewise.
	(dwarf2_read_index): Likewise.
	(dwarf2_initialize_objfile): Likewise.
	(dwarf2_fetch_die_loc_sect_off):  Get dwarf2_per_objfile from
	per_cu rather than get_dwarf2_per_objfile.
2018-04-07 13:53:42 -04:00
Simon Marchi ff4c9fec84 Replace dw2_get_cu/dw2_get_cutu with methods of dwarf2_per_objfile
Those two functions look like good candidates to become methods of
dwarf2_per_objfile.  I did that, and added get_tu as well.  When
replacing usages of dw2_get_cutu, I changed some instances to get_cutu
and others to get_cu, when appropriate (when we know we want a CU and
not a TU).

gdb/ChangeLog:

	* dwarf2read.h (struct signatured_type): Forward declare.
	(struct dwarf2_per_objfile) <get_cutu, get_cu, get_tu>:
	New methods.
	* dwarf2read.c (dwarf2_per_objfile::get_cutu): Rename from...
	(dw2_get_cutu): ...this.
	(dwarf2_per_objfile::get_cu): Rename from...
	(dw2_get_cu): ...this.
	(dwarf2_per_objfile::get_tu): New.
	(create_addrmap_from_index): Adjust.
	(create_addrmap_from_aranges): Adjust.
	(dw2_find_last_source_symtab): Adjust.
	(dw2_map_symtabs_matching_filename): Adjust.
	(dw2_symtab_iter_next): Adjust.
	(dw2_print_stats): Adjust.
	(dw2_expand_all_symtabs): Adjust.
	(dw2_expand_symtabs_with_fullname): Adjust.
	(dw2_expand_marked_cus): Adjust.
	(dw_expand_symtabs_matching_file_matcher): Adjust.
	(dw2_map_symbol_filenames): Adjust.
	(dw2_debug_names_iterator::next): Adjust.
	(dwarf2_initialize_objfile): Adjust.
	(set_partial_user): Adjust.
	(dwarf2_build_psymtabs_hard): Adjust.
2018-04-07 13:53:41 -04:00
Simon Marchi 5ca3fcb669 Remove some unused variables in dwarf2read.c
Most of them are obvious.  The ones in dwarf2_record_block_ranges are
less obvious, because it is a bit suspicious to have that many
variables unused.  But after inspection, it seems like it dates from
commit 5f46c5a548 ("Code cleanup: Split dwarf2_ranges_read to a
callback"), where dwarf2_record_block_ranges was made to use
dwarf2_ranges_process, which contains the same functionality.

gdb/ChangeLog:

	* dwarf2read.c (create_signatured_type_table_from_debug_names):
	Remove unused variables.
	(dw2_map_symtabs_matching_filename): Likewise.
	(dwarf2_record_block_ranges): Likewise.
	(dwarf2_read_addr_index): Likewise.
	(follow_die_offset): Likewise.
2018-04-07 13:53:39 -04:00
Simon Marchi b2e586e850 Defer breakpoint reset when cloning progspace for fork child
Using this simple test:

  static void
  break_here ()
  {
  }

  int
  main (int argc, char *argv[])
  {
    fork ();
    break_here();
    return 0;
  }

compiled as a PIE:

  $ gcc test.c -g3 -O0 -o test -pie

and running this:

  $ ./gdb -nx -q --data-directory=data-directory ./test -ex "b break_here" -ex "set detach-on-fork off" -ex r

gives:

  Warning:
  Cannot insert breakpoint 1.
  Cannot access memory at address 0x64a

Note that GDB might get stopped by SIGTTOU because of this issue:

  https://sourceware.org/bugzilla/show_bug.cgi?id=23020

In that case, just use "fg" to continue.

This issue happens only with position-independent executables.  Adding
the main objfile for the new inferior (the fork child) causes GDB to try
to reset the breakpoints.  However, that new objfile has not been
relocated yet.  So the breakpoint on "break_here" resolves to an
unrelocated address, from which we are trying to read/write to set a
breakpoint.  Passing SYMFILE_DEFER_BP_RESET avoids that problem.  The
executable is relocated just after, in the follow_fork_inferior
function.

The buildbot seems happy with this patch.  I don't think it's necessary
to add a new test.  Just changing this made many tests go from FAIL to
PASS on my machine, where gcc produces PIE executables by default.  If
anything, I think we would need to add a board file that produces
position-independent executables, so that we can run all the tests with
PIE, even on machines where that is not the default.

gdb/ChangeLog:

	* progspace.c (clone_program_space): Pass SYMFILE_DEFER_BP_RESET
	to symbol_file_add_main.
2018-04-07 13:51:59 -04:00
Simon Marchi 7c4e78cf63 Implement write_async_safe for mi_console_file (PR 22299)
Enabling "set debug lin-lwp 1" with the MI interpreter doesn't work.
When the sigchld_handler function wants to print a debug output
("sigchld\n"), it uses ui_file_write_async_safe.  This ends up in the
default implementation of ui_file::write_async_safe, which aborts GDB.

This patch implements the write_async_safe method for mi_console_file.
The "normal" MI output is line buffered, which means the output
accumulates in m_buffer until a \n is written, at which point it's
flushed in m_raw.  The implementation of write_async_safe provided by
this patch bypasses this buffer and writes directly to m_raw.  There are
two reasons for this:

(1) Appending to m_buffer (therefore to an std::string) is probably not
    async-safe, as it may allocate memory.
(2) We may have a partial output already in m_buffer, so that would lead
    to some nested MI output, not so great.

There is probably still a chance to have bad MI output, if
sigchld_handler is invoked in the middle of mi_console_file's flush, and
the line being flushed is only partially sent to m_raw.  The solution
would probably be to block signals during flushing.  Since this is only
used for debug output, I don't know if it's worth the effort to do that.

To implement write_async_safe, I needed to use the fputstrn_unfiltered,
which does the necessary escaping (e.g. replace \n with \\n).  I started
by adding printchar's callback parameters to fputstrn_unfiltered, to be
able to pass async-safe versions of them.  It's not easy to provide an
async-safe version of do_fprintf, but it turns out that we can easily
replace printchar's callbacks with a single do_fputc quite easily.  The
async-safe version of do_fputc simply calls the underlying ui_file's
write_async_safe method.

gdb/ChangeLog:

	PR mi/22299
	* mi/mi-console.c (do_fputc_async_safe): New.
	(mi_console_file::write_async_safe): New.
	(mi_console_file::flush): Adjust calls to fputstrn_unfiltered.
	* mi/mi-console.h (class mi_console_file) <write_async_safe>:
	New.
	* ui-file.c (ui_file::putstrn): Adjust call to
	fputstrn_unfiltered.
	* utils.c (printchar): Replace do_fputs and do_fprintf
	parameters by do_fputc.
	(fputstr_filtered): Adjust call to printchar.
	(fputstr_unfiltered): Likewise.
	(fputstrn_filtered): Likewise.
	(fputstrn_unfiltered): Add do_fputc parameter, pass to
	printchar.
	* utils.h (do_fputc_ftype): New typedef.
	(fputstrn_unfiltered): Add do_fputc parameter.
2018-04-07 13:48:06 -04:00
Simon Marchi 5dc026d3f0 Remove stale file i386-avx.dat
I noticed that regformats/i386/i386-avx.dat did not get re-generated
when doing "make" in the features directory.  I think it's a leftover
from commit

  f5a29eb0a6 ("Clean up x86 non-linux GDBserver target descriptions")

I build-tested gdbserver with amd64 and i386.

gdb/ChangeLog:

	* regformats/i386/i386-avx.dat: Remove.
2018-04-07 13:38:06 -04:00
Simon Marchi c912f608be Fix generation of x86-64 gdbarch with osabi none (PR 22979)
When a 64-bits (x86-64) gdbarch is created, it is first born as a
32-bits gdbarch in i386_gdbarch_init.  The call gdbarch_init_osabi will
call the handler register for the selected (arch, osabi) pair, such as
amd64_linux_init_abi.  The various amd64 handlers call amd64_init_abi,
which turns the gdbarch into a 64-bits one.

When selecting the i386:x86-64 architecture with no osabi, no such
handler is ever called, so the gdbarch stays (wrongfully) a 32-bits one.

My first idea was to manually call amd64_init_abi & al in
i386_gdbarch_init when the osabi is GDB_OSABI_NONE.  However, this
doesn't work in a build of GDB where i386 is included as a target but
not amd64.  My next option (implemented in this patch), is to allow
registering handlers for GDB_OSABI_NONE.  I added two such handlers in
amd64-tdep.c, so now it works the same as for the "normal" osabis.  It
required re-ordering things in gdbarch_init_osabi to allow running
handlers for GDB_OSABI_NONE.

Without this patch applied (but with the previous one*) :

  (gdb) set osabi none
  (gdb) set architecture i386:x86-64
  The target architecture is assumed to be i386:x86-64
  (gdb) p sizeof(void*)
  $1 = 4

and now:

  (gdb) set osabi none
  (gdb) set architecture i386:x86-64
  The target architecture is assumed to be i386:x86-64
  (gdb) p sizeof(void*)
  $1 = 8

* Before the previous patch, which fixed "set osabi none", this bug was
  hidden because we didn't actually try to generate a gdbarch for no
  osabi, it would always fall back on Linux.  Generating the gdbarch for
  amd64/linux did work.

gdb/ChangeLog:

	PR gdb/22979
	* amd64-tdep.c (amd64_none_init_abi): New function.
	(amd64_x32_none_init_abi): New function.
	(_initialize_amd64_tdep): Register handlers for x86-64 and
	x64_32 with GDB_OSABI_NONE.
	* osabi.c (gdbarch_init_osabi): Allow running handlers for the
	GDB_OSABI_NONE osabi.

gdb/testsuite/ChangeLog:

	PR gdb/22979
	* gdb.arch/amd64-osabi.exp: New file.
2018-04-07 13:34:59 -04:00
Simon Marchi 2654040249 Make "set osabi none" really work (PR 22980)
I was looking for a way to reproduce easily PR 22979 by doing this:

  (gdb) set architecture i386:x86-64
  (gdb) set osabi none

However, I noticed that even though I did "set osabi none", the gdbarch
gdb created was for Linux:

  (gdb) set debug arch 1
  (gdb) set architecture i386:x86-64
  ...
  (gdb) set osabi none
  gdbarch_find_by_info: info.bfd_arch_info i386:x86-64
  gdbarch_find_by_info: info.byte_order 1 (little)
  gdbarch_find_by_info: info.osabi 4 (GNU/Linux)  <--- Wrong?
  gdbarch_find_by_info: info.abfd 0x0
  gdbarch_find_by_info: info.tdep_info 0x0
  gdbarch_find_by_info: Previous architecture 0x1e6fd30 (i386:x86-64)
  selected
  gdbarch_update_p: Architecture 0x1e6fd30 (i386:x86-64) unchanged

This is because the value GDB_OSABI_UNKNOWN has an unclear role,
sometimes meaning "no osabi" and sometimes "please selected
automatically".  Doing "set osabi none" sets the requested osabi to
GDB_OSABI_UNKNOWN, in which case gdbarch_info_fill overrides it with a
value from the target description, or the built-in default osabi.  This
means that it's impossible to force GDB not to use an osabi with "set
osabi".  Since my GDB's built-in default osabi is Linux, it always falls
back to GDB_OSABI_LINUX.

To fix it, I introduced GDB_OSABI_NONE, which really means "I don't want
any osabi".  GDB_OSABI_UNKNOWN can then be used only for "not set yet,
please auto-detect".  GDB_OSABI_UNINITIALIZED now seems unnecessary
since it overlaps with GDB_OSABI_UNKNOWN, so I think it can be removed
and gdbarch_info::osabi can be initialized to GDB_OSABI_UNKNOWN.

gdb/ChangeLog:

	PR gdb/22980
	* defs.h (enum gdb_osabi): Remove GDB_OSABI_UNINITIALIZED, add
	GDB_OSABI_NONE.
	* arch-utils.c (gdbarch_info_init): Don't set info->osabi.
	* osabi.c (gdb_osabi_names): Add "unknown" entry.

gdb/testsuite/ChangeLog:

	PR gdb/22980
	* gdb.base/osabi.exp: New file.
2018-04-07 13:23:28 -04:00
Simon Marchi 9018be22e0 Make target_read_alloc & al return vectors
This patch started by changing target_read_alloc_1 to return a
byte_vector, to avoid manual memory management (in target_read_alloc_1
and in the callers).  To communicate failures to the callers, it
actually returns a gdb::optional<gdb::byte_vector>.

Adjusting target_read_stralloc was a bit more tricky, since it wants to
return a buffer of char, and not gdb_byte.  Since you can't just cast a
gdb::byte_vector into a gdb::def_vector<char>, I made
target_read_alloc_1 templated, so both versions (that return vectors of
gdb_byte and char) are generated.  Since target_read_stralloc now
returns a gdb::char_vector instead of a gdb::unique_xmalloc_ptr<char>, a
few callers need to be adjusted.

gdb/ChangeLog:

	* common/byte-vector.h (char_vector): New type.
	* target.h (target_read_alloc): Return
	gdb::optional<byte_vector>.
	(target_read_stralloc): Return gdb::optional<char_vector>.
	(target_get_osdata): Return gdb::optional<char_vector>.
	* target.c (target_read_alloc_1): Templatize.  Replacement
	manual memory management with vector.
	(target_read_alloc): Change return type, adjust.
	(target_read_stralloc): Change return type, adjust.
	(target_get_osdata): Change return type, adjust.
	* auxv.c (struct auxv_info) <length>: Remove.
	<data>: Change type to gdb::optional<byte_vector>.
	(auxv_inferior_data_cleanup): Free auxv_info with delete.
	(get_auxv_inferior_data): Allocate auxv_info with new, adjust.
	(target_auxv_search): Adjust.
	(fprint_target_auxv): Adjust.
	* avr-tdep.c (avr_io_reg_read_command): Adjust.
	* linux-tdep.c (linux_spu_make_corefile_notes): Adjust.
	(linux_make_corefile_notes): Adjust.
	* osdata.c (get_osdata): Adjust.
	* remote.c (remote_get_threads_with_qxfer): Adjust.
	(remote_memory_map): Adjust.
	(remote_traceframe_info): Adjust.
	(btrace_read_config): Adjust.
	(remote_read_btrace): Adjust.
	(remote_pid_to_exec_file): Adjust.
	* solib-aix.c (solib_aix_get_library_list): Adjust.
	* solib-dsbt.c (decode_loadmap): Don't free buf.
	(dsbt_get_initial_loadmaps): Adjust.
	* solib-svr4.c (svr4_current_sos_via_xfer_libraries): Adjust.
	* solib-target.c (solib_target_current_sos): Adjust.
	* tracepoint.c (sdata_make_value): Adjust.
	* xml-support.c (xinclude_start_include): Adjust.
	(xml_fetch_content_from_file): Adjust.
	* xml-support.h (xml_fetch_another): Change return type.
	(xml_fetch_content_from_file): Change return type.
	* xml-syscall.c (xml_init_syscalls_info): Adjust.
	* xml-tdesc.c (file_read_description_xml): Adjust.
	(fetch_available_features_from_target): Change return type.
	(target_fetch_description_xml): Adjust.
	(target_read_description_xml): Adjust.
2018-04-07 13:19:12 -04:00
Cary Coutant 43193fe9fc Further improve warnings for relocations referring to discarded sections.
Relocations referring to discarded sections are now treated as errors
instead of warnings.

Also with this patch, we will now print the section group signature and the
object file with the prevailing definition of that group along with the
name of the symbol that the relocation is referring to. This additional
information should be much more useful to anyone trying to track down
the source of such errors.

To do so, we now map each discarded section to the Kept_section info in
the Layout class, and defer the logic that maps a discarded section to
its counterpart in the kept group. This gives us the information we need
to identify the signature symbol given the discarded section, and the
name of the object file that provided the prevailing (i.e., first)
definition of that group.

gold/
	* object.cc (Sized_relobj_file::include_section_group): Store
	reference to Kept_section info for discarded comdat sections
	regardless of size.  Move size checking to map_to_kept_section.
	(Sized_relobj_file::include_linkonce_section): Likewise.
	(Sized_relobj_file::map_to_kept_section): Add section name parameter.
	Insert size checking logic from above functions.
	(Sized_relobj_file::find_kept_section_object): New method.
	(Sized_relobj_file::get_symbol_name): New method.
	* object.h (Sized_relobj_file::map_to_kept_section): Add section_name
	parameter.  Adjust all callers.
	(Sized_relobj_file::find_kept_section_object): New method.
	(Sized_relobj_file::get_symbol_name): New method.
	(Sized_relobj_file::Kept_comdat_section): Replace object and shndx
	fields with sh_size, kept_section, symndx, and is_comdat fields.
	(Sized_relobj_file::set_kept_comdat_section): Replace kept_object
	and kept_shndx parameters with is_comdat, symndx, sh_size, and
	kept_section.
	(Sized_relobj_file::get_kept_comdat_section): Likewise.
	* target-reloc.h (enum Comdat_behavior): Change CB_WARNING to CB_ERROR.
	Adjust all references.
	(issue_undefined_symbol_error): New function template.
	(relocate_section): Pass section name to map_to_kept_section.
	Move discarded section code to new function above.
	* aarch64.cc (Target_aarch64::scan_reloc_section_for_stubs): Move
	declaration for gsym out one level.  Call issue_discarded_error.
	* arm.cc (Target_arm::scan_reloc_section_for_stubs): Likewise.
	* powerpc.cc (Relocate_comdat_behavior): Change CB_WARNING to CB_ERROR.
2018-04-06 22:50:14 -07:00
GDB Administrator ef4bf13b1f Automatic date update in version.in 2018-04-07 00:00:25 +00:00
Tom Tromey 14c88955a1 Change value::contents to be a unique_xmalloc_ptr
This changes value::contents to be a unique_xmalloc_ptr, removing a
small bit of manual memory management.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.c (~value): Update.
	(struct value) <contents>: Now unique_xmalloc_ptr.
	(value_contents_bits_eq, allocate_value_contents)
	(value_contents_raw, value_contents_all_raw)
	(value_contents_for_printing, value_contents_for_printing_const)
	(set_value_enclosing_type): Update.
2018-04-06 15:44:51 -06:00
Tom Tromey 0c7e6dd852 Remove range_s VEC
This changes the "optimized_out" and "unavailable" VECs in struct
value to be std::vectors, and then fixes up all the uses.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.c (range_s): Remove typedef, VEC.
	(struct range): Add operator<.
	(range_lessthan): Remove.
	(ranges_contain): Change type.
	(~value): Update.
	(struct value) <unavailable, optimized_out>: Now std::vector.
	(value_entirely_available)
	(value_entirely_covered_by_range_vector)
	(value_entirely_unavailable, value_entirely_optimized_out):
	Update.
	(insert_into_bit_range_vector): Change argument type.
	(find_first_range_overlap): Likewise.
	(struct ranges_and_idx, value_contents_bits_eq)
	(require_not_optimized_out, require_available): Update.
	(ranges_copy_adjusted): Change argument types.
	(value_optimized_out, value_copy, value_fetch_lazy): Update.
2018-04-06 15:44:51 -06:00
Tom Tromey 2c8331b987 Change value::parent to a value_ref_ptr
This changes value::parent to a value_ref_ptr.  This removes a bit of
manual reference count management.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.c (~value): Update.
	(struct value) <parent>: Now a value_ref_ptr.
	(value_parent, set_value_parent, value_address, value_copy):
	Update.
2018-04-06 15:44:50 -06:00
Tom Tromey 466ce3aea9 Use new and delete for values
This adds a constructor and destructor to struct value, and then
changes value.c to use "new" and "delete".

While doing this I noticed a memory leak -- value_decref was not
freeing value::optimized_out.  This patch fixes this leak.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.c (struct value): Add constructor, destructor, and member
	initializers.
	(allocate_value_lazy, value_decref): Update.
2018-04-06 15:44:50 -06:00
Tom Tromey 062d818d25 Remove value::next and value::released
This patch converts all_values to simply hold a list of references to
values.  Now, there's no need to have a value record whether or not it
is released -- there is only a single reference-counting mechanism for
values.  So, this also removes value::next, value::released, and
value_next.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.c (struct value) <released, next>: Remove.
	(all_values): Now a std::vector.
	(allocate_value_lazy): Update.
	(value_next): Remove.
	(value_mark, value_free_to_mark, release_value)
	(value_release_to_mark): Update.
2018-04-06 15:44:50 -06:00
Tom Tromey a6535de190 Remove free_value_chain
This patch changes value_release_to_mark and fetch_subexp_value to
return a std::vector of value references, rather than relying on the
"next" field that is contained in a struct value.  This makes it
simpler to reason about the returned values, and also allows for the
removal of free_value_chain.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.h (fetch_subexp_value, value_release_to_mark): Update.
	(free_value_chain): Remove.
	* value.c (free_value_chain): Remove.
	(value_release_to_mark): Return a std::vector.
	* ppc-linux-nat.c (num_memory_accesses): Change "chain" to a
	std::vector.
	(check_condition): Update.
	* eval.c (fetch_subexp_value): Change "val_chain" to a
	std::vector.
	* breakpoint.c (update_watchpoint): Update.
	(can_use_hardware_watchpoint): Change "vals" to a std::vector.
2018-04-06 15:44:49 -06:00
Tom Tromey b562120198 Remove free_all_values
free_all_values is unused, so this removes it.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.h (free_all_values): Remove.
	* value.c (free_all_values): Remove.
2018-04-06 15:44:49 -06:00
Tom Tromey 4d0266a0e0 Change value history to use value_ref_ptr
This simplifies the value history implementation by replacing the
current data structure with a std::vector, and by making the value
history simply hold a reference to each value.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.c (VALUE_HISTORY_CHUNK, struct value_history_chunk)
	(value_history_chain, value_history_count): Remove.
	(value_history): New global.
	(record_latest_value, access_value_history, show_values)
	(preserve_values): Update.
2018-04-06 15:44:48 -06:00
Tom Tromey b4d61099ba Change varobj to use value_ref_ptr
This changes varobj to use value_ref_ptr, allowing the removal of some
manual reference count management.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* varobj.h (struct varobj) <value>: Now a value_ref_ptr.
	* varobj.c (varobj_set_display_format, varobj_set_value)
	(install_default_visualizer, construct_visualizer)
	(install_new_value, ~varobj, varobj_get_value_type)
	(my_value_of_variable, varobj_editable_p): Update.
	* c-varobj.c (c_describe_child, c_value_of_variable)
	(cplus_number_of_children, cplus_describe_child): Update.
	* ada-varobj.c (ada_number_of_children, ada_name_of_child)
	(ada_path_expr_of_child, ada_value_of_child, ada_type_of_child)
	(ada_value_of_variable, ada_value_is_changeable_p): Update.
2018-04-06 15:44:48 -06:00
Tom Tromey 9b5587295b Change last_examine_value to value_ref_ptr
This patch removes some manual reference count manipulation by
changing last_examine_value to be a value_ref_ptr and then updating
the users.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* printcmd.c (last_examine_address): Change type to
	value_ref_ptr.
	(do_examine, x_command): Update.
2018-04-06 15:44:47 -06:00
Tom Tromey 850645cfe8 Change breakpoints to use value_ref_ptr
Now that value_ref_ptr exists, it is possible to simplify breakpoint
and bpstat memory management by using a value_ref_ptr rather than
manually handling the reference counts.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* value.c (release_value): Update.
	* breakpoint.h (struct watchpoint) <val>: Now a value_ref_ptr.
	(struct bpstats) <val>: Now a value_ref_ptr.
	* breakpoint.c (update_watchpoint, breakpoint_init_inferior)
	(~bpstats, bpstats, bpstat_clear_actions, watchpoint_check)
	(~watchpoint, print_it_watchpoint, watch_command_1)
	(invalidate_bp_value_on_memory_change): Update.
2018-04-06 15:44:47 -06:00
Tom Tromey 22bc8444e6 Introduce a gdb_ref_ptr specialization for struct value
struct value is internally reference counted and so, while it also has
some ownership rules unique to it, it makes sense to use a gdb_ref_ptr
when managing it automatically.

This patch removes the existing unique_ptr specialization in favor of
a reference-counted pointer.  It also introduces two other
clarifications:

1. Rename value_free to value_decref, which I think is more in line
   with what the function actually does; and

2. Change release_value to return a gdb_ref_ptr.  This change allows
   us to remove the confusing release_value_or_incref function,
   primarily by making it much simpler to reason about the result of
   release_value.

gdb/ChangeLog
2018-04-06  Tom Tromey  <tom@tromey.com>

	* varobj.c (varobj_clear_saved_item)
	(update_dynamic_varobj_children, install_new_value, ~varobj):
	Update.
	* value.h (value_incref): Move declaration earlier.
	(value_decref): Rename from value_free.
	(struct value_ref_policy): New.
	(value_ref_ptr): New typedef.
	(struct value_deleter): Remove.
	(gdb_value_up): Remove typedef.
	(release_value): Change return type.
	(release_value_or_incref): Remove.
	* value.c (set_value_parent): Update.
	(value_incref): Change return type.
	(value_decref): Rename from value_free.
	(value_free_to_mark, free_all_values, free_value_chain): Update.
	(release_value): Return value_ref_ptr.
	(release_value_or_incref): Remove.
	(record_latest_value, set_internalvar, clear_internalvar):
	Update.
	* stack.c (info_frame_command): Don't call value_free.
	* python/py-value.c (valpy_dealloc, valpy_new)
	(value_to_value_object): Update.
	* printcmd.c (do_examine): Update.
	* opencl-lang.c (lval_func_free_closure): Update.
	* mi/mi-main.c (register_changed_p): Don't call value_free.
	* mep-tdep.c (mep_frame_prev_register): Don't call value_free.
	* m88k-tdep.c (m88k_frame_prev_register): Don't call value_free.
	* m68hc11-tdep.c (m68hc11_frame_prev_register): Don't call
	value_free.
	* guile/scm-value.c (vlscm_free_value_smob)
	(vlscm_scm_from_value): Update.
	* frame.c (frame_register_unwind, frame_unwind_register_signed)
	(frame_unwind_register_unsigned, get_frame_register_bytes)
	(put_frame_register_bytes): Don't call value_free.
	* findvar.c (address_from_register): Don't call value_free.
	* dwarf2read.c (dwarf2_compute_name): Don't call value_free.
	* dwarf2loc.c (entry_data_value_free_closure)
	(value_of_dwarf_reg_entry, free_pieced_value_closure)
	(dwarf2_evaluate_loc_desc_full): Update.
	* breakpoint.c (update_watchpoint, breakpoint_init_inferior)
	(~bpstats, bpstats, bpstat_clear_actions, watchpoint_check)
	(~watchpoint, watch_command_1)
	(invalidate_bp_value_on_memory_change): Update.
	* alpha-tdep.c (alpha_register_to_value): Don't call value_free.
2018-04-06 15:44:46 -06:00
Simon Marchi 7f8a5d38ed Add -Wno-error=deprecated-register to gdb build flags
As shown in PR 23022, building with clang-6 and Python 2 trips on the
fact that the Python 2 headers use the "register" keyword:

/usr/include/python2.7/unicodeobject.h:534:5: error: 'register' storage class specifier is deprecated and incompatible with C++17 [-Werror,-Wdeprecated-register]
    register PyObject *obj,     /* Object */
    ^~~~~~~~~

This patch adds -Wno-error=deprecated-register to our flags, so that we can
still see this class of warnings, but they don't cause a build failure.

gdb/ChangeLog:

	PR gdb/23022
	* warning.m4: Add -Wno-error=deprecated-register.
	* configure: Re-generate.
2018-04-06 16:11:51 -04:00
Tom Tromey 2008a0dbe3 Display all DWARF 5 language names
I happened to notice that objdump was not printing "Rust" when showing
the DW_AT_language for a CU:

    <10>   DW_AT_language    : 28	(Unknown: 1c)

This patch adds all the new language constants from DWARF 5 to
binutils/dwarf.c.

2018-04-06  Tom Tromey  <tom@tromey.com>

	* dwarf.c (read_and_display_attr_value): Add missing DW_LANG
	constants from DWARF 5.
2018-04-06 10:58:34 -06:00
H.J. Lu a6fd92b057 x86-64: Don't mask out R_X86_64_converted_reloc_bit
R_X86_64_converted_reloc_bit is set in elf_x86_64_convert_load_reloc
which is called from elf_x86_64_check_relocs.  Since it is used only
internally by linker, there is no need to mask it out in
elf_x86_64_info_to_howto.

	* elf64-x86-64.c (elf_x86_64_info_to_howto): Don't mask out
	R_X86_64_converted_reloc_bit.
2018-04-06 05:06:21 -07:00
GDB Administrator 85d8342bee Automatic date update in version.in 2018-04-06 00:00:46 +00:00
H.J. Lu 3cba8b6c93 Use dlsym to check if libdl is needed for plugin
config/plugins.m4 has

 if test "$plugins" = "yes"; then
    AC_SEARCH_LIBS([dlopen], [dl])
  fi

Plugin uses dlsym, but libasan.so only intercepts dlopen, not dlsym:

[hjl@gnu-tools-1 binutils-text]$ nm -D /lib64/libasan.so.4| grep " dl"
0000000000038580 W dlclose
                 U dl_iterate_phdr
000000000004dc50 W dlopen
                 U dlsym
                 U dlvsym
[hjl@gnu-tools-1 binutils-text]$

Testing dlopen for libdl leads to false negative when -fsanitize=address
is used.  It results in link failure:

../bfd/.libs/libbfd.a(plugin.o): undefined reference to symbol 'dlsym@@GLIBC_2.16'

dlsym should be used to check if libdl is needed for plugin.

bfd/

	PR gas/22318
	* configure: Regenerated.

binutils/

	PR gas/22318
	* configure: Regenerated.

gas/

	PR gas/22318
	* configure: Regenerated.

gprof/

	PR gas/22318
	* configure: Regenerated.

ld/

	PR gas/22318
	* configure: Regenerated.
2018-04-05 15:31:53 -07:00
H.J. Lu 552d4da417 config: Sync with GCC
Sync with GCC
	2018-04-05  H.J. Lu  <hongjiu.lu@intel.com>

	PR gas/22318
	* plugins.m4 (AC_PLUGINS): Use dlsym to check if libdl is needed.

	2018-02-14  Igor Tsimbalist  <igor.v.tsimbalist@intel.com>

	PR target/84148
	* cet.m4: Check if target support multi-byte NOPS (SSE).
2018-04-05 15:22:13 -07:00
Cary Coutant c54b27d1c0 Improve warnings for relocations referring to discarded sections.
gold/
	* target-reloc.h (relocate_section): Add local symbol index or global
	symbol name to warning about relocation that refers to discarded
	section.
2018-04-05 14:51:45 -07:00
Maciej W. Rozycki 2d8c1a2318 MIPS/binutils/testsuite: Fix `.dc.l' typo in `strip-13mips64.s'
Fix a typo: `.dc.w' -> `.dc.l' in `strip-13mips64.s', correcting a bug
from commit 2f8ceb3899 ("binutils/testsuite: Support REL and MIPS64
reloc formats with `strip-13'").  For relocation format correctness only
as there is no observable change in test results due to the lack of
connection between the second relocation entry affected and the examined
error message produced.

	binutils/
	* testsuite/binutils-all/strip-13mips64.s: Use `.dc.l' rather
	than `.dc.w' in second relocation.
2018-04-05 22:37:17 +01:00
Cary Coutant 494e49c985 Revert previous patch and apply revised patch.
Revert:

2018-04-05  James Cowgill  <james.cowgill@mips.com>

	PR gold/22770
	* mips.cc (Mips_got_info::record_got_page_entry): Fetch existing
	page entries for the object's GOT.

Apply:

	PR gold/22770
	* mips.cc (Mips_got_info::record_got_page_entry): Don't insert
	Got_page_entry for object's GOT.
	(Mips_got_info::add_got_page_entries): Add all pages from from's GOT.
	Rename to add_got_page_count.
	(Got_page_entry): Remove num_pages.
2018-04-05 09:45:07 -07:00
James Cowgill 67faf1f4c2 MIPS: Fix GOT page counter in multi-got links
The record_got_page_entry function records and updates the maximum
number of GOT page entries which may be required by an object. In the
case where an existing GOT page entry was expanded, only the entry
belonging to output GOT would have its page count updated. This leaves
the entry belonging to the object GOT with the num_pages count of 1 it
was originally initialized with. Later on when GOTs are being merged in a
multi-got link, this causes the value of entry->num_pages in
add_got_page_entries to always be 1 and underestimates the number of pages
required for the new entry. This in turn leads to an assertion failure in
get_got_page_offset where we run out of pages.

Fix by obtaining the object's GOT entry unconditionally and not just
the first time it gets created. Now that entry2 is always valid, remove
the useless NULL checks.

gold/
	PR gold/22770
	* mips.cc (Mips_got_info::record_got_page_entry): Fetch existing
	page entries for the object's GOT.
2018-04-05 08:47:53 -07:00
Nick Clifton 043e9508be Stop the IA64 linker from removing unwind tables when garbage collecting.
PR 23030
	* emulparams/elf64_ia64.sh (OTHER_READONLY_SECTIONS): Make sure
	that the .IA_64.unwind_info and .IA_64.unwind sections are not
	subject to garbage collection.
2018-04-05 14:44:05 +01:00
Tom Tromey 8a76bd3ba4 Remove unnecessary include from linespec.h
linespec.h was inculding vec.h, but doesn't expose any VECs.
So, this include can be removed.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* linespec.h: Remove include of "vec.h".
2018-04-05 07:39:37 -06:00
Tom Tromey 8e8d776ead Remove typep and VEC(typep) from linespec.c
This removes VEC(typep) from linespec.c in favor of std::vector.  It
also removes the "typep" typedef.  This change allowed the removal of
some cleanups.

I believe the previous cleanup code in find_superclass_methods could
result in a memory leak, so this patch is an improvement in that way
as well.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* linespec.c (typep): Remove typedef.
	(find_methods, find_superclass_methods): Take a std::vector.
	(find_method): Use std::vector.
2018-04-05 07:39:37 -06:00
Tom Tromey 9b2f85815c More use of std::vector in linespec.c
This changes some spots in linespec.c to take a std::vector.  This
patch spilled out to objc-lang.c a bit as well.  This change allows
for the removal of some cleanups.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* utils.c (compare_strings): Remove.
	* utils.h (compare_strings): Remove.
	* objc-lang.h (find_imps): Update.
	* objc-lang.c (find_methods): Take a std::vector.
	(uniquify_strings, find_imps): Likewise.
	* linespec.c (find_methods): Take a std::vector.
	(decode_objc): Use std::vector.
	(add_all_symbol_names_from_pspace, find_superclass_methods): Take
	a std::vector.
	(find_method, find_function_symbols): Use std::vector.
2018-04-05 07:39:37 -06:00
Tom Tromey 459a2e4ccf Change streq to return bool
I wanted to use streq with std::unique in another (upcoming) patch in
this seres, so I changed it to return bool.  To my surprise, this lead
to regressions.  The cause turned out to be that streq was used as an
htab callback -- by casting it to the correct function type.  This
sort of cast is invalid, so this patch adds a variant which is
directly suitable for use by htab.  (Note that I did not add an
overload, as I could not get that to work with template deduction in
the other patch.)

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* completer.c (completion_tracker::completion_tracker): Remove
	cast.
	(completion_tracker::discard_completions): Likewise.
	* breakpoint.c (ambiguous_names_p): Remove cast.
	* ada-lang.c (_initialize_ada_language): Remove cast.
	* utils.h (streq): Update.
	(streq_hash): Add new declaration.
	* utils.c (streq): Return bool.
	(streq_hash): New function.
2018-04-05 07:39:36 -06:00
Tom Tromey 9be2c17a90 Remove a string copy from event_location_to_sals
The use of "const" showed that a string copy in event_location_to_sals
was unnecessary.  This patch removes it.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* linespec.c (event_location_to_sals) <case ADDRESS_LOCATION>:
	Remove a string copy.
2018-04-05 07:39:36 -06:00
Tom Tromey f73c6ece78 Have filter_results take a std::vector
This chagnes filter_results to take a std::vector, allowing the
removal of some cleanups in its callers.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* linespec.c (filter_results): Use std::vector.
	(decode_line_2, decode_line_full): Update.
2018-04-05 07:39:35 -06:00
Tom Tromey 53a0f8a250 Return std::string from canonical_to_fullform
This changes canonical_to_fullform to return a std::string, and
changes decode_line_2 to use std::vector.  This allows for the removal
of some cleanups.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* linespec.c (canonical_to_fullform): Return std::string.
	(filter_results): Update.
	(struct decode_line_2_item): Add constructor.
	<fullform, displayform>: Now std::string.
	(decode_line_2_compare_items): Now a std::sort comparator.
	(decode_line_2): Update.
2018-04-05 07:39:35 -06:00
Tom Tromey a5b5adf529 Make copy_token_string return unique_xmalloc_ptr
This changes copy_token_string to return a unique_xmalloc_ptr, which
allows the removal of some cleanups.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* linespec.c (copy_token_string): Return a unique_xmalloc_ptr.
	(unexpected_linespec_error): Update.
	(linespec_parse_basic, parse_linespec): Update.
2018-04-05 07:39:34 -06:00
Tom Tromey 6a307fc5f5 Fix some indentation in linespec.c
This removes some leftover comments and fixes the indentation in a
couple of spots in linespec.c.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* linespec.c (linespec_parse_basic): Reindent.
2018-04-05 07:39:34 -06:00
Tom Tromey 41c1efc614 Remove some cleanups from search_minsyms_for_name
This changes struct collect_minsyms to use a std::vector, which
enables the removal of a cleanup from search_minsyms_for_name.  This
also changes iterate_over_minimal_symbols to take a
gdb::function_view, which makes a function in linespec.c more
type-safe.

ChangeLog
2018-04-05  Tom Tromey  <tom@tromey.com>

	* minsyms.h (iterate_over_minimal_symbols): Update.
	* minsyms.c (iterate_over_minimal_symbols): Take a
	gdb::function_view.
	* linespec.c (struct collect_minsyms): Remove.
	(compare_msyms): Now a std::sort comparator.
	(add_minsym): Add parameters.
	(search_minsyms_for_name): Update.  Use std::vector.
2018-04-05 07:39:33 -06:00
Maciej W. Rozycki 65bd20451f binutils/testsuite: Tighten the error message check with `strip-13'
Avoid false positives and actually verify both that an `unsupported
relocation type 0x8f' message is produced and that no other message is,
except for the final `bad value', in the `strip-13' test.  This ensures
that it is a relocation processing error and not a different issue that
has caused `strip' to terminate unsuccessfully, and that the number
representing the unsupported relocation has not been clobbered.

	binutils/
	* testsuite/binutils-all/strip-13.d: Also expect `unsupported
	relocation type 0x8f' error message.
2018-04-05 13:08:35 +01:00
Maciej W. Rozycki 2f8ceb3899 binutils/testsuite: Support REL and MIPS64 reloc formats with `strip-13'
Add source variants for the `strip-13' test that produce relocations in
the REL and MIPS64 formats, fixing a failure for the `mips64el-openbsd'
target.  This also corrects output for `i*86-*', `i960-*', `m6812-*' and
`m68hc12-*', o32 `mips*-*', and `score*-*' targets, which however does
not show up as a test result change due to lax error message matching
causing `bad value' previously produced by `strip' as a result of input
file rejection to be accepted as a test pass.

For `m6811-*' aka `m68hc11-*' targets this causes a phantom regression,
because they use 16-bit addressing and therefore `.dc.a' emits 16-bit
quantities causing relocation data constructed in assembly not to be as
expected.  Previously input was rejected by `strip' with a `bad value'
message and now it is accepted, however due to the relocation data error
the relocation number is not one of the unsupported ones and the tool
completes successfully, which scores as a test failure.

Disable the test case for `m6811-*' and `m68hc11-*' targets then, as it
is a test case bug rather than a problem with the relevant backend.  A
separate change to the test case is required to correct this problem, at
which point the test case can be enabled for the affected targets.

	binutils/
	* testsuite/binutils-all/strip-13.s: Rename to...
	* testsuite/binutils-all/strip-13rela.s: ... this.
	* testsuite/binutils-all/strip-13rel.s: New test source.
	* testsuite/binutils-all/strip-13mips64.s: New test source.
	* testsuite/binutils-all/strip-13.d: Remove `arm-*', `d10v-*',
	`dlx-*' and `xgate-*' from `not-target' list.  Add `m6811-*' and
	`m68hc11-*' to `not-target' list.
	* testsuite/binutils-all/objcopy.exp: Switch between sources for
	`strip-13'.
2018-04-05 13:08:35 +01:00
Maciej W. Rozycki aad7be454b binutils/testsuite: Enable `strip-13' test for `hppa*-*'
Based on relocations defined in include/elf/*.h files we have relocation
numbers: 143, 159, 214 and 215 currently not used by any of our ELF
targets.  Use 143 then instead of 241 to enable the `strip-13' test for
`hppa*-*' targets.  It has a side effect with some targets of verifying
that unused relocations whose numbers are below the respective R_*_max
value are handled correctly.

	binutils/
	* testsuite/binutils-all/strip-13.s: Use 143 (0x8f) rather than
	241 (0xf1) for the relocation number and RELA addend.
	* testsuite/binutils-all/strip-13.d: Remove `hppa*-*' from the
	`not-target' list.
2018-04-05 13:08:35 +01:00