Commit Graph

24722 Commits

Author SHA1 Message Date
Alan Hayward 8e3681243c Remove MAX_REGISTER_SIZE from remote.c
gdb/
	* regcache.c (regcache_raw_update): New function.
	(regcache_raw_read): Move code to regcache_raw_update.
	* regcache.h (regcache_raw_update): New declaration.
	* remote.c (remote_prepare_to_store): Call regcache_raw_update.
2017-02-27 09:58:35 +00:00
Jan Kratochvil a49dd8dd48 DWARF-5: Initialization due to a false compiler warning
gcc-6.3.1-1.fc25.x86_64

dwarf2read.c: In function ‘void create_debug_type_hash_table(dwo_file*, dwarf2_section_info*, htab*&, rcuh_kind)’:
dwarf2read.c:4776:32: error: ‘header.comp_unit_head::type_offset_in_tu.cu_offset::cu_off’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
dwarf2read.c:4816:21: error: ‘header.comp_unit_head::signature’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
cc1plus: all warnings being treated as errors

gdb/ChangeLog
2017-02-26  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (create_debug_type_hash_table): Initialize
	header.signature and header.type_offset_in_tu.
2017-02-26 16:54:51 +01:00
Pedro Alves 34e4bae972 symtab.c: Small refactor
add_symtab_completions does the exact same as the code that it is
replacing.

gdb/ChangeLog:
2017-02-24  Pedro Alves  <palves@redhat.com>

	* symtab.c (make_file_symbol_completion_list_1): Use
	add_symtab_completions.
2017-02-24 17:42:51 +00:00
Alan Hayward b0e4b369d5 Remove use of MAX_REGISTER_SIZE
gdb/
	* stack.c (frame_info): Use frame_unwind_register_value to avoid buf.
2017-02-24 16:09:48 +00:00
Alan Hayward 975c21ab6d Use I386_MAX_REGISTER_SIZE and M68K_MAX_REGISTER_SIZE
gdb/
	* i386-tdep.c (i386_pseudo_register_read_into_value): Use
	I386_MAX_REGISTER_SIZE.
	(i386_pseudo_register_write): Likewise.
	(i386_process_record): Likewise.
	* i387-tdep.c (i387_supply_xsave): Likewise.
	* m68k-linux-nat.c (fetch_register): Use M68K_MAX_REGISTER_SIZE.
	(store_register): Likewise.
2017-02-24 16:09:43 +00:00
Pedro Alves 14bc53a814 Use gdb::function_view in iterate_over_symtabs & co
I wanted to pass a lambda to iterate_over_symtabs (see following
patch), so I converted it to function_view, and then the rest is
cascaded from that.

This gets rid of a bunch of single-use callback functions and
corresponding manually managed callback capture types
(add_partial_datum, search_symbols_data, etc.) in favor of letting the
compiler generate them for us by using lambdas with a capture.  In a
couple cases, it was more natural to convert the existing function
callbacks to function objects (i.e., operator(), e.g.,
decode_compound_collector).

gdb/ChangeLog:
2017-02-23  Pedro Alves  <palves@redhat.com>

	* ada-lang.c: Include "common/function-view.h".
	(ada_iterate_over_symbols): Adjust to use function_view as
	callback type.
	(struct add_partial_datum, ada_complete_symbol_matcher): Delete.
	(ada_make_symbol_completion_list): Use a lambda.
	(ada_exc_search_name_matches): Delete.
	(name_matches_regex): New.
	(ada_add_global_exceptions): Use a lambda and name_matches_regex.
	* compile/compile-c-support.c: Include "common/function-view.h".
	(print_one_macro): Change prototype to accept a ui_file pointer.
	(write_macro_definitions): Use a lambda.
	* dwarf2read.c: Include "common/function-view.h".
	(dw2_map_expand_apply, dw2_map_symtabs_matching_filename)
	(dw2_expand_symtabs_matching): Adjust to use function_view as
	callback type.
	* language.h: Include "common/function-view.h".
	(struct language_defn) <la_iterate_over_symbols>: Adjust to use
	function_view as callback type.
	(LA_ITERATE_OVER_SYMBOLS): Remove DATA parameter.
	* linespec.c: Include "common/function-view.h".
	(collect_info::add_symbol): New method.
	(struct symbol_and_data_callback, iterate_inline_only, struct
	symbol_matcher_data, iterate_name_matcher): Delete.
	(iterate_over_all_matching_symtabs): Adjust to use function_view
	as callback type and lambdas.
	(iterate_over_file_blocks): Adjust to use function_view as
	callback type.
	(decode_compound_collector): Now a class with private fields.
	(decode_compound_collector::release_symbols): New method.
	(collect_one_symbol): Rename to...
	(decode_compound_collector::operator()): ... this and adjust.
	(lookup_prefix_sym): decode_compound_collector construction bits
	move to decode_compound_collector ctor.  Pass the
	decode_compound_collector object directly as callback.  Remove
	cleanups and use decode_compound_collector::release_symbols
	instead.
	(symtab_collector): Now a class with private fields.
	(symtab_collector::release_symtabs): New method.
	(add_symtabs_to_list): Rename to...
	(symtab_collector::operator()): ... this and adjust.
	(collect_symtabs_from_filename): symtab_collector construction
	bits move to symtab_collector ctor.  Pass the symtab_collector
	object directly as callback.  Remove cleanups and use
	symtab_collector::release_symtabs instead.
	(collect_symbols): Delete.
	(add_matching_symbols_to_info): Use lambdas.
	* macrocmd.c (print_macro_callback): Delete.
	(info_macro_command): Use a lambda.
	(info_macros_command): Pass print_macro_definition as callable
	directly.
	(print_one_macro): Remove 'ignore' parameter.
	(macro_list_command): Adjust.
	* macrotab.c (macro_for_each_data::fn): Now a function_view.
	(macro_for_each_data::user_data): Delete field.
	(foreach_macro): Adjust to call the function_view.
	(macro_for_each): Adjust to use function_view as callback type.
	(foreach_macro_in_scope): Adjust to call the function_view.
	(macro_for_each_in_scope): Adjust to use function_view as callback
	type.
	* macrotab.h: Include "common/function-view.h".
	(macro_callback_fn): Declare a prototype instead of a pointer.
	Remove "user_data" parameter.
	(macro_for_each, macro_for_each_in_scope): Adjust to use
	function_view as callback type.
	* psymtab.c (partial_map_expand_apply)
	(psym_map_symtabs_matching_filename, recursively_search_psymtabs):
	Adjust to use function_view as callback type and to return bool.
	(psym_expand_symtabs_matching): Adjust to use function_view as
	callback types.
	* symfile-debug.c (debug_qf_map_symtabs_matching_filename): Adjust
	to use function_view as callback type and to return bool.
	(debug_qf_expand_symtabs_matching): Adjust to use function_view as
	callback types.
	* symfile.c (expand_symtabs_matching): Adjust to use function_view
	as callback types.
	* symfile.h: Include "common/function-view.h".
	(expand_symtabs_file_matcher_ftype)
	(expand_symtabs_symbol_matcher_ftype)
	(expand_symtabs_exp_notify_ftype): Remove "data" parameter and
	return bool.
	(quick_symbol_functions::map_symtabs_matching_filename)
	(quick_symbol_functions::expand_symtabs_matching): Adjust to use
	function_view as callback type and return bool.
	(expand_symtabs_matching): Adjust to use function_view as callback
	type.
	(maintenance_expand_name_matcher)
	(maintenance_expand_file_matcher): Delete.
	(maintenance_expand_symtabs): Use lambdas.
	* symtab.c (iterate_over_some_symtabs): Adjust to use
	function_view as callback types and return bool.
	(iterate_over_symtabs): Likewise.  Use unique_xmalloc_ptr instead
	of a cleanup.
	(lookup_symtab_callback): Delete.
	(lookup_symtab): Use a lambda.
	(iterate_over_symbols): Adjust to use function_view as callback
	type.
	(struct search_symbols_data, search_symbols_file_matches)
	(search_symbols_name_matches): Delete.
	(search_symbols): Use a pair of lambdas.
	(struct add_name_data, add_macro_name, symbol_completion_matcher)
	(symtab_expansion_callback): Delete.
	(default_make_symbol_completion_list_break_on_1): Use lambdas.
	* symtab.h: Include "common/function-view.h".
	(iterate_over_some_symtabs): Adjust to use function_view as
	callback type and return bool.
	(iterate_over_symtabs): Adjust to use function_view as callback
	type.
	(symbol_found_callback_ftype): Remove 'data' parameter and return
	bool.
	(iterate_over_symbols): Adjust to use function_view as callback
	type.
2017-02-23 16:16:06 +00:00
Pedro Alves 07e253aa3b Introduce gdb::function_view
This commit adds a new function_view type.  This type holds a
non-owning reference to a callable.  It is meant to be used as
callback type of functions, instead of using the C-style pair of
function pointer and 'void *data' arguments.  function_view allows
passing references to stateful function objects / lambdas with
captures as callbacks efficiently, while function pointer + 'void *'
does not.

See the intro in the new function-view.h header for more.

Unit tests included, put into a new gdb/unittests/ subdir.

gdb/ChangeLog:
2017-02-23  Pedro Alves  <palves@redhat.com>

	* Makefile.in (SUBDIR_UNITTESTS_SRCS, SUBDIR_UNITTESTS_OBS): New.
	(%.o) <unittests/%.c>: New pattern.
	* configure.ac ($development): Add $(SUBDIR_UNITTESTS_OBS) to
	CONFIG_OBS, and $(SUBDIR_UNITTESTS_SRCS) to CONFIG_SRCS.
	* common/function-view.h: New file.
	* unittests/function-view-selftests.c: New file.
	* configure: Regenerate.
2017-02-23 16:14:08 +00:00
Simon Marchi 8eaf53202e Fix usage of inferior_ptid in two thread_alive implementations
While inspecting some target code, I noticed that in these two
implementations of thread_alive, inferior_ptid is referenced directly
instead of using the ptid passed as parameters.  I guess that it is
wrong, although I can't really test it in both cases.

gdb/ChangeLog:

	* bsd-uthread.c (bsd_uthread_thread_alive): Use ptid instead of
	inferior_ptid.
	* go32-nat.c (go32_thread_alive): Likewise.
2017-02-23 10:36:20 -05:00
Yao Qi 3876875113 Use xfree rather than delete for varobj_iter
ASAN reports an error,

-var-create container @ c^M
=================================================================^M
^[[1m^[[31m==21639==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete) on 0x6030000805c0^M
^[[1m^[[0m    #0 0x7f2449b01b2a in operator delete(void*) (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x99b2a)^M
    #1 0xbb601d in update_dynamic_varobj_children ../../binutils-gdb/gdb/varobj.c:794^M
    #2 0xbb6556 in varobj_get_num_children(varobj*) ../../binutils-gdb/gdb/varobj.c:854^M
    #3 0x580cb4 in print_varobj ../../binutils-gdb/gdb/mi/mi-cmd-var.c:61^M
    #4 0x58138b in mi_cmd_var_create(char*, char**, int) ../../binutils-gdb/gdb/mi/mi-cmd-var.c:145^M
    #5 0x5967ce in mi_cmd_execute ../../binutils-gdb/gdb/mi/mi-main.c:2301^M
    #6 0x594b05 in captured_mi_execute_command ../../binutils-gdb/gdb/mi/mi-main.c:2001
....
^M
^[[1m^[[32m0x6030000805c0 is located 0 bytes inside of 32-byte region [0x6030000805c0,0x6030000805e0)^M
^[[1m^[[0m^[[1m^[[35mallocated by thread T0 here:^[[1m^[[0m^M
    #0 0x7f2449b00602 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x98602)^M
    #1 0x7d1596 in xmalloc ../../binutils-gdb/gdb/common/common-utils.c:43^M
    #2 0x604176 in py_varobj_iter_new ../../binutils-gdb/gdb/python/py-varobj.c:159^M
    #3 0x6042da in py_varobj_get_iterator(varobj*, _object*) ../../binutils-gdb/gdb/python/py-varobj.c:198^M
    #4 0xbb5806 in varobj_get_iterator ../../binutils-gdb/gdb/varobj.c:720^M
    #5 0xbb5b9b in update_dynamic_varobj_children ../../binutils-gdb/gdb/varobj.c:758^M

gdb:

2017-02-23  Yao Qi  <yao.qi@linaro.org>

	* varobj-iter.h (varobj_iter_delete): Call xfree instead of
	delete.
2017-02-23 11:57:46 +00:00
Yao Qi 0a8beaba19 Use delete instead of xfree for varobj_item
In commit 2f408ec (Use ui_file_as_string throughout more), we start to
new varobj_item,

> -  vitem = XNEW (struct varobj_item);
> +  vitem = new varobj_item ();

but we still use xfree.  This causes some ASAN errors,

-var-update container^M
=================================================================^M
^[[1m^[[31m==20660==ERROR: AddressSanitizer: alloc-dealloc-mismatch (operator new vs free) on 0x602000090c10^M
^[[1m^[[0m    #0 0x2baa77d03631 in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x54631)^M
    #1 0x80e0c8 in xfree(void*) /home/yao/SourceCode/gnu/gdb/git/gdb/common/common-utils.c:100^M
    #2 0xc13670 in varobj_clear_saved_item /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:727^M
    #3 0xc13957 in update_dynamic_varobj_children /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:752^M
    #4 0xc1841c in varobj_update(varobj**, int) /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:1699^M
    #5 0x5a2bf7 in varobj_update_one /home/yao/SourceCode/gnu/gdb/git/gdb/mi/mi-cmd-var.c:712^M
    #6 0x5a2a41 in mi_cmd_var_update(char*, char**, int) /home/yao/SourceCode/gnu/gdb/git/gdb/mi/mi-cmd-var.c:695^
........
^M
^[[1m^[[32m0x602000090c10 is located 0 bytes inside of 16-byte region [0x602000090c10,0x602000090c20)^M
^[[1m^[[0m^[[1m^[[35mallocated by thread T0 here:^[[1m^[[0m^M
    #0 0x2baa77d0415f in operator new(unsigned long) (/usr/lib/x86_64-linux-gnu/libasan.so.1+0x5515f)^M
    #1 0x63613e in py_varobj_iter_next /home/yao/SourceCode/gnu/gdb/git/gdb/python/py-varobj.c:112^M
    #2 0xc13b89 in update_dynamic_varobj_children /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:776^M
    #3 0xc1841c in varobj_update(varobj**, int) /home/yao/SourceCode/gnu/gdb/git/gdb/varobj.c:1699^M
    #4 0x5a2bf7 in varobj_update_one /home/yao/SourceCode/gnu/gdb/git/gdb/mi/mi-cmd-var.c:712^M
    #5 0x5a2a41 in mi_cmd_var_update(char*, char**, int) /home/yao/SourceCode/gnu/gdb/git/gdb/mi/mi-cmd-var.c:695^M

gdb:

2017-02-23  Yao Qi  <yao.qi@linaro.org>

	* varobj.c (varobj_clear_saved_item): Use delete instead of
	xfree.
	(update_dynamic_varobj_children): Likewise.
2017-02-23 11:05:03 +00:00
Jan Kratochvil 58fdfd2c4a Fix a regression by: Code cleanup: Split dwarf2_ranges_read to a callback
On some Fedora 23 systems an internal error has been printed.

gdb/ChangeLog
2017-02-21  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (dwarf2_record_block_ranges): Add forgotten BASEADDR.
2017-02-22 00:13:03 +01:00
Simon Marchi 1b90b13906 Default initialize enum flags to 0
... so that we don't need to do it manually, and potentially forget.
For example, this allows to do:

  my_flags flags;

  ...

  flags |= some_flag;

gdb/ChangeLog:

	* common/enum-flags.h (enum_flags::enum_flags): Initialize
	m_enum_value to 0 in default constructor.
2017-02-21 11:48:49 -05:00
Edjunior Barbosa Machado 2039d74e78 [ppc64] Add POWER8/ISA 2.07 atomic sequences single-stepping support
gdb/
2017-02-21  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>

	* rs6000-tdep.c (LOAD_AND_RESERVE_MASK): Rename from LWARX_MASK.
	(STORE_CONDITIONAL_MASK): Rename from STWCX_MASK.
	(LBARX_INSTRUCTION, LHARX_INSTRUCTION, LQARX_INSTRUCTION,
	STBCX_INSTRUCTION, STHCX_INSTRUCTION, STQCX_INSTRUCTION): New defines.
	(IS_LOAD_AND_RESERVE_INSN, IS_STORE_CONDITIONAL_INSN): New macros.
	(ppc_displaced_step_copy_insn): Use IS_LOAD_AND_RESERVE_INSN.
	(ppc_deal_with_atomic_sequence): Use IS_LOAD_AND_RESERVE_INSN and
	IS_STORE_CONDITIONAL_INSN.

gdb/testsuite/
2017-02-21  Edjunior Barbosa Machado  <emachado@linux.vnet.ibm.com>

	* gdb.arch/ppc64-isa207-atomic-inst.exp: New testcase based on
	gdb.arch/ppc64-atomic-inst.exp.  Add tests for lbarx/stbcx, lharx/sthcx
	and lqarx/stqcx.
	* gdb.arch/ppc64-isa207-atomic-inst.S: New file.
	* gdb.arch/ppc64-isa207-atomic-inst.c: Likewise.
2017-02-21 11:14:56 -03:00
Jan Kratochvil 7814882a65 Fix recent compiler warnings.
gcc-4.8.5-11.el7.x86_64

dwarf2read.c: In function ‘pc_bounds_kind dwarf2_get_pc_bounds(die_info*, CORE_ADDR*, CORE_ADDR*, dwarf2_cu*, partial_symtab*)’:
dwarf2read.c:12134:7: error: ‘range_end’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
dwarf2read.c:12133:7: error: ‘range_beginning’ may be used uninitialized in this function [-Werror=maybe-uninitialized]

gdb/ChangeLog
2017-02-21  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2_rnglists_process: Initialize range_beginning and range_end.
2017-02-21 09:14:37 +01:00
Jan Kratochvil 0ae60b631e DWARF-5: NEWS
a NEWS entry.

gdb/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* NEWS (Changes since GDB 7.12): Add DWARF-5.
2017-02-20 21:02:51 +01:00
Jan Kratochvil 0224619f60 DWARF-5: DW_FORM_data16
DWARF-5 has new form DW_FORM_data16.  The problem is that GDB cannot pass
16-byte constant as a constant value as that would require GDB to use GCC
extension __int128.

Formerly such data was coded as DW_FORM_block* so GDB still decodes
DW_FORM_data16 like DW_FORM_block*.

gdb/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (skip_one_die, read_attribute_value)
	(dwarf2_const_value_attr, dump_die_shallow)
	(dwarf2_get_attr_constant_value, dwarf2_fetch_constant_bytes)
	(skip_form_bytes, attr_form_is_constant): Handle DW_FORM_data16.

gdb/testsuite/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.dwarf2/formdata16.c: New file.
	* gdb.dwarf2/formdata16.exp: New file.
	* lib/dwarf.exp (Dwarf): Add DW_FORM_data16.
2017-02-20 21:02:20 +01:00
Jan Kratochvil 0af92d6069 DWARF-5: Macros
DWARF-5 renamed DW_MACRO_GNU_* to DW_MACRO_*.

gdb/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (read_file_scope): Rename DW_MACRO_GNU_*.
	(dwarf_parse_macro_header): Accept DWARF version 5.
	(dwarf_decode_macro_bytes, dwarf_decode_macros): Rename DW_MACRO_GNU_*.
2017-02-20 21:01:49 +01:00
Jan Kratochvil 216f72a1ed DWARF-5: call sites
this patch updates all call sites related DWARF-5 renames.

gdb/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* block.c (call_site_for_pc): Rename DW_OP_GNU_*, DW_TAG_GNU_* and
	DW_AT_GNU_*.
	* common/common-exceptions.h (enum errors): Likewise.
	* dwarf2-frame.c (class dwarf_expr_executor): Likewise.
	* dwarf2expr.c (dwarf_block_to_dwarf_reg)
	(dwarf_expr_context::execute_stack_op): Likewise.
	* dwarf2expr.h (struct dwarf_expr_context, struct dwarf_expr_piece):
	Likewise.
	* dwarf2loc.c (dwarf_evaluate_loc_desc::get_base_type)
	(dwarf_evaluate_loc_desc::push_dwarf_reg_entry_value)
	(show_entry_values_debug, call_site_to_target_addr)
	(func_addr_to_tail_call_list, func_verify_no_selftailcall)
	(dwarf_expr_reg_to_entry_parameter, dwarf_entry_parameter_to_value)
	(entry_data_value_free_closure, value_of_dwarf_reg_entry)
	(value_of_dwarf_block_entry, indirect_pieced_value)
	(symbol_needs_eval_context::push_dwarf_reg_entry_value):
	(disassemble_dwarf_expression): Likewise.
	* dwarf2read.c (process_die, inherit_abstract_dies)
	(read_call_site_scope): Likewise.
	* gdbtypes.h (struct func_type, struct call_site_parameter)
	(struct call_site): Likewise.
	* stack.c (read_frame_arg): Likewise.
	* std-operator.def (OP_VAR_ENTRY_VALUE): Likewise.

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

	* gdb.texinfo (Print Settings, Tail Call Frames): Rename DW_OP_GNU_*,
	DW_TAG_GNU_* and DW_AT_GNU_*.

gdb/testsuite/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.arch/amd64-entry-value-param-dwarf5.S: New file.
	* gdb.arch/amd64-entry-value-param-dwarf5.c: New file.
	* gdb.arch/amd64-entry-value-param-dwarf5.exp: New file.
	* gdb.arch/amd64-entry-value.exp: Rename DW_OP_GNU_*, DW_TAG_GNU_* and
	DW_AT_GNU_*.
2017-02-20 21:00:55 +01:00
Jan Kratochvil 43988095a5 DWARF-5 basic functionality
this is a kitchen-sink patch for everything that did not fit into its own
patch.

DWO is not yet implemented.

gdb/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* defs.h (read_unsigned_leb128): New declaration.
	* dwarf2loc.c (decode_debug_loclists_addresses): New function.
	(decode_debug_loc_dwo_addresses): Update DEBUG_LOC_* to DW_LLE_*.
	(dwarf2_find_location_expression): Call also
	decode_debug_loclists_addresses.  Handle DWARF-5 ULEB128 length.
	* dwarf2loc.h (dwarf2_version): New declaration.
	* dwarf2read.c (struct dwarf2_per_objfile): Add loclists, line_str,
	rnglists.
	(dwarf2_elf_names): Add .debug_loclists, .debug_line_str,
	.debug_rnglists.
	(struct dwop_section_names): Add loclists_dwo.
	(dwop_section_names): Add .debug_loclists.dwo.
	(struct comp_unit_head): Add unit_type, signature, type_offset_in_tu.
	(struct dwarf2_per_cu_data): Add dwarf_version.
	(struct dwo_sections): Add loclists.
	(struct attr_abbrev): Add implicit_const.
	(read_indirect_line_string): New declaration.
	(read_unsigned_leb128): Delete declaration.
	(rcuh_kind): New definition.
	(read_and_check_comp_unit_head): Change parameter
	is_debug_types_section to section_kind.
	(dwarf2_locate_sections): Handle loclists, line_str and rnglists.
	(read_comp_unit_head): Change parameter abfd to section, add parameter
	section_kind.  Handle DWARF-5.
	(error_check_comp_unit_head): Accept also DWARF version 5.
	(read_and_check_comp_unit_head): Change parameter
	is_debug_types_section to section_kind.
	(read_and_check_type_unit_head): Delete function.
	(read_abbrev_offset): Handle DWARF-5.
	(create_debug_type_hash_table): Add parameter section_kind.  Process
	only DW_UT_type.  Use signature and type_offset_in_tu from struct
	comp_unit_head.
	(create_debug_types_hash_table): Update create_debug_type_hash_table
	caller.
	(create_all_type_units): Call create_debug_type_hash_table.
	(read_cutu_die_from_dwo, init_cutu_and_read_dies): Change
	read_and_check_type_unit_head caller to read_and_check_comp_unit_head
	caller.
	(skip_one_die): Handle DW_FORM_implicit_const.
	(dwarf2_rnglists_process): New function.
	(dwarf2_ranges_process): Call dwarf2_rnglists_process for DWARF-5.
	(abbrev_table_read_table): Handle DW_FORM_implicit_const.
	(read_attribute_value): Handle DW_FORM_implicit_const,
	DW_FORM_line_strp.
	(read_attribute): Handle DW_FORM_implicit_const.
	(read_indirect_string_at_offset_from): New function from
	read_indirect_string_at_offset.
	(read_indirect_string_at_offset): Call
	read_indirect_string_at_offset_from.
	(read_indirect_line_string_at_offset): New function.
	(read_indirect_string): New function comment.
	(read_indirect_line_string): New function.
	(read_unsigned_leb128): Make it global.
	(dwarf2_string_attr): Handle DWARF-5.
	(add_include_dir_stub, read_formatted_entries): New functions.
	(dwarf_decode_line_header, dump_die_shallow, cu_debug_loc_section):
	Handle DWARF-5.
	(per_cu_header_read_in): Update read_comp_unit_head caller.
	(dwarf2_version): New function.
	* symfile.h (struct dwarf2_debug_sections): Add loclists, line_str and
	rnglists.
	* xcoffread.c (dwarf2_xcoff_names): Update struct dwarf2_debug_sections
	fields.

gdb/testsuite/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gdb.dwarf2/dw2-error.exp (file $testfile): Update expected string.
2017-02-20 20:59:56 +01:00
Jan Kratochvil 22d2f3ab92 Code cleanup: Refactor abbrev_table_read_table cycle
I find it as an improvement on its own, it prevents more code duplication in
a future patch.

gdb/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (abbrev_table_read_table): Read the data only once.
2017-02-20 20:59:40 +01:00
Jan Kratochvil 5f46c5a548 Code cleanup: Split dwarf2_ranges_read to a callback
DWARF-5 has .debug_rnglists which is somehow similar to .debug_ranges.

This patch converts dwarf2_ranges_read to dwarf2_ranges_process which can work
with both DWARF kinds of range lists through a callback.

It also simplifies dwarf2_record_block_ranges which can benefit from it.

gdb/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (dwarf2_ranges_process): New function from
	dwarf2_ranges_read.
	(dwarf2_ranges_read, dwarf2_record_block_ranges): Use
	dwarf2_ranges_process.
2017-02-20 20:59:14 +01:00
Jan Kratochvil 78d4d2c538 Code cleanup: Split create_debug_types_hash_table
DWARF-5 moved .debug_types into .debug_info and so the types reading code needs
to be reused more (in a future patch).

gdb/ChangeLog
2017-02-20  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* dwarf2read.c (create_debug_type_hash_table): New function from
	create_debug_types_hash_table.
	(create_debug_types_hash_table): Call create_debug_type_hash_table.
	(create_all_type_units, open_and_init_dwo_file): Update
	create_debug_types_hash_table callers.
2017-02-20 20:53:19 +01:00
Sergio Durigan Junior 1b076f2540 Fix thinko on last commit
On fork-child.c:trace_start_error, va_end should refer to 'ap', not
'args.  This fixes it.

Sorry about the breakage.

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

	PR gdb/16188
	* fork-child.c (trace_start_error): Fix thinko.  va_end should
	refer to 'ap', not 'args'.
2017-02-20 08:03:13 -05:00
Sergio Durigan Junior 0db8980cc0 PR gdb/16188: Verify PTRACE_TRACEME succeeded
This patch fixes PR gdb/16188, which is about the fact that
fork_inferior doesn't verify the return value of the "traceme_fun"
callback.  On most targets, this callback is actually a wrapper to a
ptrace call that does a PTRACE_TRACEME on the forked GDB process that
will eventually become the inferior.

Thanks to Pedro, this second version of the patch is simpler and more
more logical.  Basically, two helper functions are added:
trace_start_error and trace_start_error_with_name.  The former can be
used when there is a customized error message to be printed to the
user.  The latter works like perror_with_name, so you just need to
pass the function that error'd.

Both helper functions mentioned above do basically the same thing:
print the error message to stderr and call _exit, properly terminating
the forked inferior.

Most of the patch takes care of guarding the necessary system calls
against errors on the "traceme_fun" callbacks.  It is not right to
call error on these situations, so I've replaced these calls with the
proper helper function call.

Regression-tested on BuildBot.

Thanks,

gdb/ChangeLog:
2017-02-20  Sergio Durigan Junior  <sergiodj@redhat.com>
	    Pedro Alves  <palves@redhat.com>

	PR gdb/16188
	* darwin-nat.c (darwin_ptrace_me): Check if calls to system
	calls succeeded.
	* fork-child.c (trace_start_error): New function.
	(trace_start_error_with_name): Likewise.
	* gnu-nat.c (gnu_ptrace_me): Check if call to PTRACE succeeded.
	* inf-ptrace.c (inf_ptrace_me): Likewise.
	* inferior.h (trace_start_error): New prototype.
	(trace_start_error_with_name): Likewise.
2017-02-20 07:48:44 -05:00
Sergio Durigan Junior 99e8a4f9f8 PR gdb/21164: maint print {symbols,msymbols,psymbols} without args crash
This is a fix for PR gdb/21164.  The problem started to happen after:

 commit 34c41c681f
 Author:     Doug Evans <xdje42@gmail.com>
 AuthorDate: Mon Dec 19 08:33:46 2016 -0800

    New syntax for mt print symbols,msymbols,psymbols.

This change introduced new syntax for the mentioned commands, and
improved the parsing of arguments by using 'gdb_buildargv'.  However,
it is necessary to check if the argv being built is not NULL, which
can happen if the user doesn't provide any arguments to these
commands.

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

	PR gdb/21164
	* psymtab.c (maintenance_print_psymbols): Verify if 'argv' is not
	NULL before using it.
	* symmisc.c (maintenance_print_symbols): Likewise.
	(maintenance_print_msymbols): Likewise.

gdb/testsuite/ChangeLog:

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

	PR gdb/21164
	* gdb.base/maint.exp: Add testcases for when the commands do
	not have arguments.
2017-02-15 19:54:10 -05:00
Tim Wiederhake 4e746bb689 Add missing ChangeLog entries.
This adds the missing ChangeLog entries for the "Python bindings" patch series.
2017-02-15 08:15:56 +01:00
Tom Tromey 3f77c7691f PR python/13598 - add before_prompt event
This adds an event that is emitted just before GDB presents a prompt
to the user.  This provides Python code a way to react to whatever
changes might have been made by the previous command.  For example, in
my GUI I use this to track changes to the selected frame and reflect
them in the UI.

Built and regtested on x86-64 Fedora 23.

gdb/ChangeLog
2017-02-14  Tom Tromey  <tom@tromey.com>

	PR python/13598:
	* python/python.c (gdbpy_before_prompt_hook): Emit before_prompt
	event.
	* python/py-evts.c (gdbpy_initialize_py_events): Add
	before_prompt registry.
	* python/py-events.h (events_object) <before_prompt>: New field.

gdb/doc/ChangeLog
2017-02-14  Tom Tromey  <tom@tromey.com>

	PR python/13598:
	* python.texi (Events In Python): Document events.before_prompt.

gdb/testsuite/ChangeLog
2017-02-14  Tom Tromey  <tom@tromey.com>

	PR python/13598:
	* gdb.python/py-events.exp: Add before_prompt event tests.
2017-02-14 10:38:56 -07:00
Markus Metzger 4c2c7ac69d btrace: preserve call stack on function switch
On 64-bit FC25, the _dl_runtime_resolve function uses a conditional branch to
'call' a particular variant optimized for that system:

    (gdb) disas _dl_runtime_resolve_avx_opt
    Dump of assembler code for function _dl_runtime_resolve_avx_opt:
       0x00007ffff7deeb60 <+0>: push   %rax
       0x00007ffff7deeb61 <+1>: push   %rcx
       0x00007ffff7deeb62 <+2>: push   %rdx
       0x00007ffff7deeb63 <+3>: mov    $0x1,%ecx
       0x00007ffff7deeb68 <+8>: xgetbv
       0x00007ffff7deeb6b <+11>: mov    %eax,%r11d
       0x00007ffff7deeb6e <+14>: pop    %rdx
       0x00007ffff7deeb6f <+15>: pop    %rcx
       0x00007ffff7deeb70 <+16>: pop    %rax
       0x00007ffff7deeb71 <+17>: and    $0x4,%r11d
       0x00007ffff7deeb75 <+21>: bnd je 0x7ffff7def4a0 <_dl_runtime_resolve_sse_vex>
    End of assembler dump.

When computing the function-level trace, btrace treats this as a switch from
_dl_runtime_resolve_avx_opt to _dl_runtime_resolve_sse_vex.  We know that we
switched functions but we can't really say in which caller/callee relationship
those two functions are.

In addition to preserving the indentaion level, also preserve the caller
information.  This is a heuristic since we don't really know.  But at least in
this case, this seems to be the right thing to do.

This fixes a fail in gdb.btrace/rn-dl-bind.exp on 64-bit FC25.

gdb/
	* btrace.c (ftrace_new_switch): Preserve up link and flags.
2017-02-14 10:15:27 +01:00
Luis Machado 5cf30ebf64 Improve load command's help text
This fairly obvious patch adds usage text to the load command's help text.

Originally it did not have usage and mentioned things like FILE and OFFSET
without explaining how those should be passed in the command.

gdb/ChangeLog:

2017-02-13  Luis Machado  <lgustavo@codesourcery.com>

	* symfile (_initialize_symfile): Add usage text to the load command's
	help text.

gdb/doc/ChangeLog:

2017-02-13  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.texinfo (Target Commands): Document the optional offset
	argument for the load command.
2017-02-13 07:29:30 -06:00
Simon Marchi 26a06916b6 Do not send queries on secondary UIs
This is a follow-up to

  https://sourceware.org/ml/gdb-patches/2017-02/msg00261.html

This patch restricts queries to the main UI, which allows to avoid two
different problems.

The first one is that GDB is issuing queries on secondary MI channels
for which a TTY is allocated.  The second one is that GDB is not able to
handle queries on two (CLI) UIs simultaneously.  Restricting queries to
the main UI allows to bypass these two problems.

More details on how/why these two problems happen:

1. Queries on secondary MI UI

  The current criterion to decide if we should query the user is whether
  the input stream is a TTY.  The original way to start GDB in MI mode
  from a front-end was to create a subprocess with pipes to its
  stdin/stdout.  In this case, the input was considered non-interactive
  and queries were auto-answered.  Now that front-ends can create the MI
  channel as a separate UI connected to a dedicated TTY, GDB now
  considers this input stream as interactive and sends queries to it.
  By restricting queries to the main UI, we make sure we never query on
  the secondary MI UI.

2. Simultaneous queries

  As Pedro stated it, when you have two queries on two different CLI UIs
  at the same time, you end up with the following pseudo stack:

  #0 gdb_readline_wrapper
  #1 defaulted_query                 // for UI #2
  #2 handle_command
  #3 execute_command ("handle SIGTRAP" ....
  #4 stdin_event_handler             // input on UI #2
  #5 gdb_do_one_event
  #7 gdb_readline_wrapper
  #8 defaulted_query                 // for UI #1
  #9 handle_command
  #10 execute_command ("handle SIGINT" ....
  #11 stdin_event_handler            // input on UI #1
  #12 gdb_do_one_event
  #13 gdb_readline_wrapper

  trying to answer the query on UI #1 will therefore answer for UI #2.

  By restricting the queries to the main UI, we ensure that there will
  never be more than one pending query, since you can't have two queries
  on a UI at the same time.

I added a snippet to gdb.base/new-ui.exp to verify that we get a query
on the main UI, but that we don't on the secondary one (or, more
precisely, that it gets auto-answered).

gdb/ChangeLog:

	* utils.c (defaulted_query): Don't query on secondary UIs.

gdb/testsuite/ChangeLog:

	* gdb.base/new-ui.exp (do_test): Test queries behavior on main
	and extra UIs.
2017-02-10 16:29:50 -05:00
Tom Tromey 0b145e37a2 Remove unused variable in rust-lang.c
I found another unused "cleanup" local variable, this time in
rust-lang.c.  This patch removes it.  Committing as obvious.

gdb/ChangeLog
2017-02-10  Tom Tromey  <tom@tromey.com>

	* rust-lang.c (rust_get_disr_info): Remove unused variable.
2017-02-10 13:09:23 -07:00
Tom Tromey 2d8365c48f Remove unnecessary local variables
I found an unused local variables in a couple of places in the Python
code; this removes them.

gdb/ChangeLog
2017-02-10  Tom Tromey  <tom@tromey.com>

	* python/py-value.c (valpy_richcompare_throw): Remove unnecessary
	"cleanup" local.
	* python/py-type.c (typy_legacy_template_argument): Remove
	unnecessary "cleanup" local.
2017-02-10 12:24:34 -07:00
Tom Tromey 2bb8f23195 Remove some gotos from Python
This patch slightly refactors a couple of spots in the Python code to
avoid some gotos.

gdb/ChangeLog
2017-02-10  Tom Tromey  <tom@tromey.com>

	* python/python.c (do_start_initialization): New function, from
	_initialize_python.
	(_initialize_python): Call do_start_initialization.
	* python/py-linetable.c (ltpy_iternext): Use explicit returns, not
	goto.
2017-02-10 12:24:34 -07:00
Tom Tromey 1bdfaf42ac Change one more spot to use gdbpy_ref
This patch changes one more spot in the Python layer to use gdbpy_ref.

gdb/ChangeLog
2017-02-10  Tom Tromey  <tom@tromey.com>

	* python/py-prettyprint.c (pretty_print_one_value): Use
	gdbpy_ref.
2017-02-10 12:24:33 -07:00
Tom Tromey 88b6faea99 Use gdbpy_ref to simplify some logic
This uses the new gdbpy_ref template to simplify logic in various
parts of the Python layer; for example removing repeated error code or
removing gotos.

gdb/ChangeLog
2017-02-10  Tom Tromey  <tom@tromey.com>

	* python/py-cmd.c (cmdpy_destroyer): Use gdbpy_ref.
	* python/py-breakpoint.c (gdbpy_breakpoint_deleted): Use
	gdbpy_ref.
	* python/py-type.c (field_new): Use gdbpy_ref.
	* python/py-symtab.c (symtab_and_line_to_sal_object): Use
	gdbpy_ref.
	* python/py-progspace.c (pspy_new): Use gdbpy_ref.
	(py_free_pspace): Likewise.
	(pspace_to_pspace_object): Likewise.
	* python/py-objfile.c (objfpy_new): Use gdbpy_ref.
	(py_free_objfile): Likewise.
	(objfile_to_objfile_object): Likewise.
	* python/py-inferior.c (delete_thread_object): Use
	gdbpy_ref.
	(infpy_read_memory): Likewise.
	(py_free_inferior): Likewise.
	* python/py-evtregistry.c (create_eventregistry_object): Use
	gdbpy_ref.
	* python/py-event.c (create_event_object): Use gdbpy_ref.
2017-02-10 12:24:32 -07:00
Tom Tromey 7780f18678 Turn gdbpy_ref into a template
This turns gdbpy_ref into a template class, so that it can be used to
wrap subclasses of PyObject.  The default argument remains PyObject;
and this necessitated renaming uses of "gdbpy_ref" to "gdbpy_ref<>".

gdb/ChangeLog
2017-02-10  Tom Tromey  <tom@tromey.com>

	* python/py-ref.h (gdbpy_ref_policy): Now a template.
	(gdbpy_ref): Now a template; allow subclasses of PyObject to be
	used.
	* python/py-arch.c, python/py-bpevent.c, python/py-breakpoint.c,
	python/py-cmd.c, python/py-continueevent.c, python/py-event.c,
	python/py-exitedevent.c, python/py-finishbreakpoint.c,
	python/py-framefilter.c, python/py-function.c,
	python/py-inferior.c, python/py-infevents.c,
	python/py-linetable.c, python/py-newobjfileevent.c,
	python/py-param.c, python/py-prettyprint.c, python/py-ref.h,
	python/py-signalevent.c, python/py-stopevent.c,
	python/py-symbol.c, python/py-threadevent.c, python/py-type.c,
	python/py-unwind.c, python/py-utils.c, python/py-value.c,
	python/py-varobj.c, python/py-xmethods.c, python/python.c,
	varobj.c: Change gdbpy_ref to gdbpy_ref<>.
2017-02-10 12:24:31 -07:00
Tom Tromey d4b0bb186e Remove some ui_out-related cleanups from Python
This patch introduces a bit of infrastructure -- namely, a minimal
std::optional analogue called gdb::optional, and an RAII template
class that works like make_cleanup_ui_out_tuple_begin_end or
make_cleanup_ui_out_list_begin_end -- and then uses these in the
Python code.  This removes a number of cleanups and generally
simplifies this code.

std::optional is only available in C++17.  Normally I would have had
this code check __cplusplus, but my gcc apparently isn't new enough to
find <optional>, even with -std=c++1z; so, because I could not test
it, the patch does not do this.

gdb/ChangeLog
2017-02-10  Tom Tromey  <tom@tromey.com>

	* ui-out.h (ui_out_emit_type): New class.
	(ui_out_emit_tuple, ui_out_emit_list): New typedefs.
	* python/py-framefilter.c (py_print_single_arg): Use gdb::optional
	and ui_out_emit_tuple.
	(enumerate_locals): Likewise.
	(py_mi_print_variables, py_print_locals, py_print_args): Use
	ui_out_emit_list.
	(py_print_frame): Use gdb::optional, ui_out_emit_tuple,
	ui_out_emit_list.
	* common/gdb_optional.h: New file.
2017-02-10 12:24:31 -07:00
Martin Galvan f67f945cf2 gdb/MAINTAINERS: Update my e-mail address
gdb/ChangeLog:

2017-02-10  Martin Galvan  <martingalvan@sourceware.org>

        * MAINTAINERS (Write After Approval): Update my e-mail address.
2017-02-10 13:50:32 -03:00
Martin Galvan 18da0c51da PR gdb/21122: Fix documentation mistakes for breakpoint commands
Currently, the breakpoint documentation refers to some commands taking breakpoint
"ranges" as arguments. We discussed this with Pedro and concluded that it would
be more accurate to speak in terms of breakpoint "lists", whose elements can optionally
be ranges. I also fixed a couple of minor mistakes in the docs.

gdb/ChangeLog:

	* breakpoint.c (_initialize_breakpoint): Update the help description
	of the 'commands' command to indicate that it takes a list argument.

gdb/doc/ChangeLog:

	* gdb.texinfo (Breakpoints): Reword documentation to speak in terms of
	space-separated breakpoint lists.  Also add a missing @table command
	and @cindex for breakpoint lists.

gdb/testsuite/ChangeLog:

	* gdb.base/help.exp: Update match pattern for testing 'help commands'.
2017-02-10 13:38:54 -03:00
Simon Marchi 62c14536e4 Remove return in function returning void
gdb/ChangeLog:

	* interps.c (current_interp_set_logging): Remove "return".
2017-02-09 16:24:40 -05:00
Gary Benson ff6fa24786 Fix NULL pointer dereference
This commit fixes a segmentation fault on tab completion when
certain debuginfo is installed:

  https://bugzilla.redhat.com/show_bug.cgi?id=1398387

gdb/ChangeLog:

	* symtab.c (add_symtab_completions): Prevent NULL pointer
	dereference.
2017-02-09 15:37:57 +00:00
Pedro Alves a474bd8eee Eliminate interp::quiet_p
This commit removes interp::quiet_p / interp_quiet_p /
interp_set_quiet, because AFAICS, it doesn't really do anything.

interp_quiet is only ever checked inside interp_set nowadays:

  if (!first_time && !interp_quiet_p (interp))
    {
      xsnprintf (buffer, sizeof (buffer),
		 "Switching to interpreter \"%.24s\".\n", interp->name);
      current_uiout->text (buffer);
    }

I did a bit of archaelogy, and found that back in 4a8f6654 (2003), it
was also called in another place, to decide whether to print the CLI
prompt.

AFAICS, that condition is always false today, making that if/then
block always dead code.  If we remove that code, then there are no
interp_quiet_p uses left in the tree, so we can remove it all.

There are two paths that lead to interp_set calls:

#1 - When installing the top level interpreter.  In this case,
FIRST_TIME is true.

#2 - In interpreter_exec_cmd.  In this case, the interpreter is always
set quiet before interp_set is called.

Grepping a gdb.log of an x86_64 GNU/Linux run for "Switching to
interpreter" (before this patch) doesn't find any hits.

I suspect the intention of this message was to support something like
a "set interpreter ..." command that would change the interpreter
permanently.  But there's no such command.

Tested on x86_64 Fedora 23.

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

	* interps.c (interp::interp): Remove reference to quiet_p.
	(interp_set): Make static.  Remove dead "Switching to" output
	code.
	(interp_quiet_p, interp_set_quiet): Delete.
	(interpreter_exec_cmd): Don't set the interpreter quiet.
	* interps.h (interp_quiet_p): Make static.
	(class interp) <quiet_p>: Remove field
2017-02-08 18:08:18 +00:00
Jerome Guitton 604c4576fd Command abbreviation in define
When defining a new macro, "command" is not recognized as an alias for
"commands":

 (gdb) define breakmain
 Type commands for definition of "breakmain".
 End with a line saying just "end".
 >break main
 >command
 >echo "IN MAIN\n"
 >end
 (gdb)

There is a special case for while-stepping, where 'ws' and 'stepping' are
recognized explicitely. Instead of adding more special cases, this change
uses cli-decode.

gdb/ChangeLog:
	* cli/cli-decode.c (find_command_name_length): Make it extern.
	* cli/cli-decode.h (find_command_name_length): Declare.
	* cli/cli-script.c (command_name_equals, line_first_arg):
	New functions.
	(process_next_line): Use cli-decode to parse command names.
	(build_command_line): Make args a constant pointer.

gdb/testsuite/ChangeLog:

	* gdb.base/define.exp: Add test for command abbreviations
	in define.
2017-02-08 19:03:25 +01:00
Jerome Guitton 3d7b173c29 Command names: make them case sensitive
Case-insensitive search for command names is an obscure undocumented
feature, which seems to be unused, is not tested and not quite
consistent. Remove it.

gdb/ChangeLog:

	* cli-decode.c (lookup_cmd_1, lookup_cmd_composition):
	Remove case-insensitive search.
2017-02-08 18:57:31 +01:00
Jose E. Marchesi 1291063dea gdb: fix ARI warning in sparc-tdep.c
gdb/ChangeLog:

2017-02-07  Jose E. Marchesi  <jose.marchesi@oracle.com>

	* sparc-tdep.c (sparc32_gdbarch_init): Do not place a + operator
	at the end of the line.
2017-02-07 13:21:54 -08:00
Luis Machado 20b477a75c [BZ 21005] Add support for Intel 64 rdrand and rdseed record/replay
This patch addresses BZ 21005, which is gdb failing to recognize an rdrand
instruction.

It enables support for both rdrand and rdseed and handles extended register
addressing (R8~R15) for 16-bit, 32-bit and 64-bit.

gdb/ChangeLog
2017-02-06  Luis Machado  <lgustavo@codesourcery.com>

	* NEWS: Mention support for record/replay of Intel 64 rdrand and
	rdseed instructions.
	i386-tdep.c (i386_process_record): Handle Intel 64 rdrand and rseed.

gdb/testsuite/ChangeLog:
2017-02-06  Luis Machado  <lgustavo@codesourcery.com>

	* gdb.reverse/insn-reverse.c: Include insn-reverse-x86.c.
	* gdb.reverse/insn-reverse-x86.c: New file.
2017-02-06 03:12:00 -06:00
Ivo Raisr 3f7b46f2da gdb: provide and use sparc{32,64} target description XML files.
gdb/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	Provide and use sparc32 and sparc64 target description XML files.
	* features/sparc/sparc32-cp0.xml, features/sparc/sparc32-cpu.xml,
	features/sparc/sparc32-fpu.xml: New files for sparc 32-bit.
	* features/sparc/sparc64-cp0.xml, features/sparc/sparc64-cpu.xml,
	features/sparc/sparc64-fpu.xml: New files for sparc 64-bit.
	* features/sparc/sparc32-solaris.xml: New file.
	* features/sparc/sparc64-solaris.xml: New file.
	* features/sparc/sparc32-solaris.c: Generated.
	* features/sparc/sparc64-solaris.c: Generated.
	* sparc-tdep.h: Account for differences in target descriptions.
	* sparc-tdep.c (sparc32_register_name): Use target provided registers.
	(sparc32_register_type): Use target provided registers.
	(validate_tdesc_registers): New function.
	(sparc32_gdbarch_init): Use tdesc_has_registers.
	Set pseudoregister functions.
	* sparc64-tdep.c (sparc64_register_name): Use target provided registers.
	(sparc64_register_type): Use target provided registers.
	(sparc64_init_abi): Set pseudoregister functions.

gdb/doc/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	* gdb.texinfo: (Standard Target Features): Document SPARC features.
	(Sparc Features): New node.

gdb/testsuite/ChangeLog:

2017-02-06  Ivo Raisr  <ivo.raisr@oracle.com>

	PR tdep/20936
	* gdb.xml/tdesc-regs.exp: Provide sparc core registers for the tests.
2017-02-05 23:44:03 -08:00
Tom Tromey f0fd41c192 Fix ptype of single-member Rust enums
While looking into PR rust/21097, I found that ptype of a
single-element enum in Rust did not always format the result properly.
In particular, it would leave out the members of a tuple struct.
Further testing showed that it also did the wrong thing for ordinary
struct members as well.

This patch fixes these problems.  I'm marking it as being associated
with the PR, since that is where the discovery was made; but this
doesn't actually fix that PR (which I think ultimately is due to a
Rust compiler bug).

Built and regtested on x86-64 Fedora 25, using the system Rust
compiler.  I'm checking this in.

2017-02-03  Tom Tromey  <tom@tromey.com>

	PR rust/21097:
	* rust-lang.c (rust_print_type) <TYPE_CODE_UNION>: Handle enums
	with a single member.

2017-02-03  Tom Tromey  <tom@tromey.com>

	PR rust/21097:
	* gdb.rust/simple.exp: Add new tests.
2017-02-03 22:14:36 -07:00
Pedro Alves d6f9b0fbc7 C++-fy struct interp/cli_interp/tui_interp/mi_interp
- The interp->data field disappears, since we can put data in the
  interpreter directly now.  The "init" method remains in place, but
  it now returns void.

- A few places check if the interpreter method is NULL before calling
  it, and also check whether the method returns true/false.  For some
  of those methods, all current implementations always return true.
  In those cases, this commit makes the C++-fied method return void
  instead and cleans up the callers.

Tested on x86_64 Fedora 23.

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

	* cli/cli-interp.c (cli_interp_base::cli_interp_base)
	(cli_interp_base::~cli_interp_base): New.
	(cli_interp): New struct.
	(as_cli_interp): Cast the interp itself to cli_interp.
	(cli_interpreter_pre_command_loop): Rename to ...
	(cli_interp_base::pre_command_loop): ... this.  Remove 'self'
	parameter.
	(cli_interpreter_init): Rename to ...
	(cli_interp::init): ... this.  Remove 'self' parameter.  Use
	boolean.  Make extern.
	(cli_interpreter_resume): Rename to ...
	(cli_interp::resume): ... this.  Remove 'data' parameter.  Make
	extern.
	(cli_interpreter_suspend): Rename to ...
	(cli_interp::suspend): ... this.  Remove 'data' parameter.  Make
	extern.
	(cli_interpreter_exec): Rename to ...
	(cli_interp::exec): ... this.  Remove 'data' parameter.  Make
	extern.
	(cli_interpreter_supports_command_editing): Rename to ...
	(cli_interp_base::supports_command_editing): ... this.  Remove
	'interp' parameter.  Make extern.
	(cli_ui_out): Rename to ...
	(cli_interp::interp_ui_out): ... this.  Remove 'interp' parameter.
	Make extern.
	(cli_set_logging): Rename to ...
	(cli_interp_base::set_logging): ... this.  Remove 'interp'
	parameter.  Make extern.
	(cli_interp_procs): Delete.
	(cli_interp_factory): Adjust to use "new".
	* cli/cli-interp.h: Include "interps.h".
	(struct cli_interp_base): New struct.
	* interps.c (struct interp): Delete.  Fields moved to interps.h.
	(interp_new): Delete.
	(interp::interp, interp::~interp): New.
	(interp_set): Use bool, and return void.  Assume the interpreter
	has suspend, init and resume methods, and that the all return
	void.
	(set_top_level_interpreter): interp_set returns void.
	(interp_ui_out): Adapt.
	(current_interp_set_logging): Adapt.
	(interp_data): Delete.
	(interp_pre_command_loop, interp_supports_command_editing): Adapt.
	(interp_exec): Adapt.
	(top_level_interpreter_data): Delete.
	* interps.h (interp_init_ftype, interp_resume_ftype)
	(interp_suspend_ftype, interp_exec_ftype)
	(interp_pre_command_loop_ftype, interp_ui_out_ftype): Delete.
	(class interp): New.
	(interp_new): Delete.
	(interp_set): Now returns void.  Use bool.
	(interp_data, top_level_interpreter_data): Delete.
	* mi/mi-common.h: Include interps.h.
	(class mi_interp): Inherit from interp.  Define a ctor.  Declare
	init, resume, suspect, exec, interp_ui_out, set_logging and
	pre_command_loop methods.
	* mi/mi-interp.c (as_mi_interp): Cast the interp itself.
	(mi_interpreter_init): Rename to ...
	(mi_interp::init): ... this.  Remove the 'interp' parameter, use
	bool, return void and make extern.  Adjust.
	(mi_interpreter_resume): ... Rename to ...
	(mi_interp::resume): ... this.  Remove the 'data' parameter,
	return void and make extern.  Adjust.
	(mi_interpreter_suspend): ... Rename to ...
	(mi_interp::suspend): ... this.  Remove the 'data' parameter,
	return void and make extern.  Adjust.
	(mi_interpreter_exec): ... Rename to ...
	(mi_interp::exec): ... this.  Remove the 'data' parameter and make
	extern.  Adjust.
	(mi_interpreter_pre_command_loop): ... Rename to ...
	(mi_interp::pre_command_loop): ... this.  Remove the 'self'
	parameter and make extern.
	(mi_on_normal_stop_1): Adjust.
	(mi_ui_out): Rename to ...
	(mi_interp::interp_ui_out): ... this.  Remove the 'interp'
	parameter and make extern.  Adjust.
	(mi_set_logging): Rename to ...
	(mi_interp::set_logging): ... this.  Remove the 'interp'
	parameter and make extern.  Adjust.
	(mi_interp_procs): Delete.
	(mi_interp_factory): Adjust to use 'new'.
	* mi/mi-main.c (mi_cmd_gdb_exit, captured_mi_execute_command)
	(mi_print_exception, mi_execute_command, mi_load_progress):
	Adjust.
	* tui/tui-interp.c (tui_interp): New class.
	(as_tui_interp): Return a tui_interp pointer.
	(tui_on_normal_stop, tui_on_signal_received)
	(tui_on_end_stepping_range, tui_on_signal_exited, tui_on_exited)
	(tui_on_no_history, tui_on_user_selected_context_changed): Adjust
	to use interp::interp_ui_out.
	(tui_init): Rename to ...
	(tui_interp::init): ... this.  Remove the 'self' parameter, use
	bool, return void and make extern.  Adjust.
	(tui_resume): Rename to ...
	(tui_interp::resume): ... this.  Remove the 'data' parameter,
	return void and make extern.  Adjust.
	(tui_suspend): Rename to ...
	(tui_interp::suspend): ... this.  Remove the 'data' parameter,
	return void and make extern.  Adjust.
	(tui_ui_out): Rename to ...
	(tui_interp::interp_ui_out): ... this.  Remove the 'self'
	parameter, and make extern.  Adjust.
	(tui_exec): Rename to ...
	(tui_interp::exec): ... this.  Remove the 'data' parameter and
	make extern.
	(tui_interp_procs): Delete.
	(tui_interp_factory): Use "new".
2017-02-03 16:30:04 +00:00
Tom Tromey 65c40c956f Use bool in Rust code
This changes various functions in the Rust code to use a bool rather
than an int when a boolean is intended.

2017-02-02  Tom Tromey  <tom@tromey.com>

	* rust-exp.y (ends_raw_string, space_then_number)
	(rust_identifier_start_p): Return bool.
	* rust-lang.c (rust_tuple_type_p, rust_underscore_fields)
	(rust_tuple_struct_type_p, rust_tuple_variant_type_p)
	(rust_slice_type_p, rust_range_type_p, rust_u8_type_p)
	(rust_chartype_p): Return bool.
	(val_print_struct, rust_print_struct_def, rust_print_type):
	Update.
	* rust-lang.h (rust_tuple_type_p, rust_tuple_struct_type_p):
	Return bool.
2017-02-02 21:25:12 -07:00