aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2017-02-20DWARF-5: call sitesJan Kratochvil18-100/+965
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-20DWARF-5 basic functionalityJan Kratochvil9-140/+805
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-20Code cleanup: Refactor abbrev_table_read_table cycleJan Kratochvil2-10/+15
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-20Code cleanup: Split dwarf2_ranges_read to a callbackJan Kratochvil2-85/+49
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-20Code cleanup: Split create_debug_types_hash_tableJan Kratochvil2-125/+139
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-20Fix thinko on last commitSergio Durigan Junior2-1/+7
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-20PR gdb/16188: Verify PTRACE_TRACEME succeededSergio Durigan Junior6-8/+67
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-17Add support for Intel PKRU register to GDB and GDBserver.Michael Sturm40-133/+560
This patch adds support for the registers added by the Memory Protection Keys for Userspace (PKU aka PKEYs) feature. Native and remote debugging are covered by this patch. The XSAVE area is extended with a new state containing the 32-bit wide PKRU register. The new register is added to amd64-avx-mpx_avx512-* tdesc, thus it is renamed accordingly. Also, respective xstate mask X86_XSTATE_AVX_MPX_AVX512_MASK is renamed to X86_XSTATE_AVX_MPX_AVX512_PKU_MASK to reflect the new feature set it supports. For more information, please refer to the Intel(R) 64 and IA-32 Architectures Software Developer's Manual - Septemper 2015 http://www.intel.com/content/dam/www/public/us/en/documents/ manuals/64-ia-32-architectures-software-developer-manual-325462.pdf gdb/Changelog: 2015-12-08 Michael Sturm <michael.sturm@intel.com> * NEWS: Mention addition of PKU feature. * amd64-linux-nat.c (amd64_linux_gregset32_reg_offset): Add PKRU register. * amd64-linux-tdep.c (features/i386/amd64-avx-mpx-avx512-linux.c): Rename to... (features/i386/amd64-avx-mpx-avx512-pku-linux.c): ...this. (amd64_linux_gregset_reg_offset): Add PKRU register. (amd64_linux_core_read_description): Rename X86_XSTATE_AVX_MPX_AVX512_MASK, rename tdesc_amd64_avx_mpx_avx512_pku_linux. (_initialize_amd64_linux_tdep): Rename initialize_tdesc_amd64_avx_mpx_avx512_linux. * amd64-linux-tdep.h (AMD64_LINUX_ORIG_RAX_REGNUM): Adjust regnum calculation. (tdesc_amd64_avx_mpx_avx512_linux): Rename to... (tdesc_amd64_avx_mpx_avx512_pku_linux): ...this. * amd64-tdep.c (features/i386/amd64-avx-mpx-avx512-pku.c): Rename to... (features/i386/amd64-avx-mpx-avx512-pku.c): ...this. (amd64_pkeys_names): New register name for raw register PKRU. (amd64_init_abi): Add code to initialize PKRU tdep variables if feature is present. (amd64_target_description): Rename X86_XSTATE_AVX_MPX_AVX512_MASK, rename tdesc_amd64_avx_mpx_avx512. (_initialize_amd64_tdep): Rename initialize_tdesc_amd64_avx_mpx_avx512. * amd64-tdep.h (enum amd64_regnum): Add PKRU register. (AMD64_NUM_REGS): Adjust regnum calculation. * i386-linux.nat.c (GETXSTATEREGS_SUPPLIES): Extend range of registers supplied via XSTATE by PKRU register. * common/x86-xstate.h (X86_XSTATE_PKRU): New macro. (X86_XSTATE_AVX_MPX_AVX512_MASK): Add PKRU and renamed mask. (X86_XSTATE_ALL_MASK): Rename X86_XSTATE_AVX_MPX_AVX512_MASK. (X86_XSTATE_PKRU_SIZE): New macro. (X86_XSTATE_MAX_SIZE): Adjust size. (HAS_PKRU(XCR0)): New macro. (X86_XSTATE_SIZE): Add checkfor PKRU. * features/Makefile (WHICH): Rename i386/i386-avx-mpx-avx512, i386/i386-avx-mpx-avx512-linux, i386/amd64-avx-mpx-avx512, i386/amd64-avx-mpx-avx512-linux. (i386/i386-avx-mpx-avx512-expedite): Rename expedite. (i386/i386-avx-mpx-avx512-linux-expedite): Likewise. (i386/amd64-avx-mpx-avx512-expedite): Likewise. (i386/amd64-avx-mpx-avx512-linux-expedite): Likewise. (XMLTOC): Rename i386/amd64-avx-mpx-avx512-linux.xml, i386/amd64-avx-mpx-avx512.xml, i386/i386-avx-mpx-avx512-linux.xml, i386/i386-avx-mpx-avx512.xml. ((outdir)/i386/i386-avx-mpx-avx512.dat): Rename rule, add i386/32bit-pkeys.xml. ((outdir)/i386/i386-avx-mpx-avx512-pku-linux.dat): Likewise. ((outdir)/i386/amd64-avx-mpx-avx512.dat): Rename rule, add i386/64bit-pkeys.xml. ((outdir)/i386/amd64-avx-mpx-avx512-linux.dat): Likewise. * features/i386/32bit-pkeys.xml: New file. * features/i386/64bit-pkeys.xml: Likewise. * features/i386/amd64-avx-mpx-avx512-linux-pku.c: Regenerate from renamed XML file. * features/i386/amd64-avx-mpx-avx512-linux.xml: Rename to amd64-avx-mpx-avx512-pku-linux.xml, add 64bit-pkeys.xml * features/i386/amd64-avx-mpx-avx512.c: Regenerate from renamed XML file. * features/i386/amd64-avx-mpx-avx512.xml: Rename to amd64-avx-mpx-avx512-pku.xml, add 64bit-pkeys.xml. * features/i386/i386-avx-mpx-avx512-linux.c: Regenerate from renamed XML file. * features/i386/i386-avx-mpx-avx512-linux.xml: Rename to i386-avx-mpx-avx512-pku-linux.xml, add 32bit-pkeys.xml. * features/i386/i386-avx-mpx-avx512.c: Regenerate from renamed XML file. * features/i386/i386-avx-mpx-avx512.xml: Rename to i386-avx-mpx-avx512-pku.xml, add 32bit-pkeys.xml. * i386-linux-nat.c (GETXSTATEREGS_SUPPLIES): Change to use I386_PKEYS_NUM_REGS. * i386-linux-tdep.c (features/i386/i386-avx-mpx-avx512-linux.c): Rename include. (i386_linux_gregset_reg_offset): Add PKRU register. (i386_linux_core_read_description): Rename xstate mask and returned tdesc for X86_XSTATE_AVX_MPX_AVX512_PKU_MASK. (_initialize_i386_linux_tdep): Rename initialize_tdesc_i386_avx_mpx_avx512_linux. * i386-linux-tdep.h (I386_LINUX_ORIG_EAX_REGNUM): Adjuste regnum calculation. (tdesc_i386_avx_mpx_avx512_linux): Rename prototype. (/* Format of XSAVE...): Add pkru register. * i386-tdep.c (i386-avx-mpx-avx512.c): Rename include. (i386_pkeys_names): New register name for raw register PKRU. (i386_pkru_regnum_p): Add function to look up register number of PKRU raw register. (i386_register_reggroup_p): Add code to exclude PKRU from general register group. (i386_validate_tdesc_p): Add code to handle PKRU feature, add PKRU registers if feature is present in xcr0. (i386_gdbarch_init): Adjust number of registers in architecture. Add code to initialize PKRU feature variables in tdep structure. (i386_target_description): Rename xstate mask and returned tdesc for X86_XSTATE_AVX_MPX_AVX512_PKU_MASK. (_initialize_i386_tdep): Rename initialize_tdesc_i386_avx_mpx_avx512. * i386-tdep.h (struct gdbarch_tdep): Add feature variables to tdep structure. (enum i386_regnum): Add PKRU register. (I386_PKEYS_NUM_REGS): New define for number of registers in PKRU feature. (i386_pkru_regnum_p): New prototype. * i387-tdep.c (xsave_pkeys_offset): New table for PKRU offsets in XSAVE buffer. (XSAVE_PKEYS_ADDR): New macro. (i387_supply_xsave): Add code to handle PKRU register. (i387_collect_xsave): Likewise. * i387-tdep.h (I387_NUM_PKEYS_REGS): New define for number of registers in PKRU feature. (I387_PKRU_REGNUM): New macro. (I387_PKEYSEND_REGNUM): Likewise. * regformats/i386/amd64_avx_mpx_avx512_pku_linux.dat: Regenerate from renamed XML file. * regformats/i386/amd64_avx_mpx_avx512_pku.dat: Likewise. * regformats/i386/i386/amd64-avx-mpx-avx512-pku.dat: Likewise. * regformats/i386/i386_avx_mpx_avx512_pku_linux.dat: Likewise. testsuite/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * gdb.arch/i386-pkru.c: New file. * gdb.arch/i386-pkru.exp: Likewise. gdbserver/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * Makefile.in (clean): Rename i386-avx-mpx-avx512.c, i386-avx-mpx-avx512-linux.c, amd64-avx-mpx-avx512.c, amd64-avx-mpx-avx512-linux.c. (i386-avx-mpx-avx512-linux-ipa.o:): Rename rule and source file. (amd64-avx-mpx-avx512-linux-ipa.o:): Likewise. (i386-avx-mpx-avx512.c :): Rename rule, source files and dat files. (i386-avx-mpx-avx512-linux.c :): Likewise. (amd64-avx-mpx-avx512.c :): Likewise. (amd64-avx-mpx-avx512-linux.c :): Likewise. * configure.srv (srv_i386_regobj): Rename i386-avx-mpx-avx512.o. (srv_i386_linux_regobj): Rename i386-avx-mpx-avx512-linux.o. (srv_amd64_regobj): Rename amd64-avx-mpx-avx512.o. (srv_amd64_linux_regobj): Rename amd64-avx-mpx-avx512-linux.o. (ipa_i386_linux_regobj): Rename i386-avx-mpx-avx512-linux-ipa.o. (ipa_amd64_linux_regobj): Rename amd64-avx-mpx-avx512-pku-linux-ipa.o. (srv_i386_32bit_xmlfiles): Add 32bit-pkeys.xml. (srv_i386_64bit_xmlfiles): Add 64bit-pkeys.xml. (srv_i386_xmlfiles): Rename i386/i386-avx-mpx-avx512.xml. (srv_amd64_xmlfiles): Rename i386/amd64-avx-mpx-avx512.xml. (srv_i386_linux_xmlfiles): Rename i386/i386-avx-mpx-avx512-linux.xml. (srv_amd64_linux_xmlfiles): Rename di386/amd64-avx-mpx-avx512-linux.xml. * i387-fp.c (num_pkeys_registers): New variable. (struct i387_xsave): Add space for pkru values. (i387_cache_to_fsave): Add code to handle PKRU register. (i387_xsave_to_cache): Likewise. * linux-amd64-ipa.c (get_ipa_tdesc): Rename tdesc_amd64_avx_mpx_avx512_linux. (initialize_low_tracepoint): Rename init_registers_amd64_avx_mpx_avx512_linux. * linux-i386-ipa.c (get_ipa_desc): Rename tdesc_i386_avx_mpx_avx512_linux. (initialize_low_tracepoint): Rename init_registers_i386_avx_mpx_avx512_linux. * linux-x86-low.c (x86_64_regmap[]): Add PKRU register. (x86_linux_read_description): Rename X86_XSTATE_AVX_MPX_AVX512_MASK, rename tdesc_amd64_avx_mpx_avx512_linux, rename tdesc_i386_avx_mpx_avx512_linux. (x86_get_ipa_tdesc_idx): Rename tdesc_amd64_avx_mpx_avx512_linux, rename tdesc_i386_avx_mpx_avx512_linux. (initialize_low_arch): Rename init_registers_amd64_avx_mpx_avx512_linux, rename init_registers_i386_avx_mpx_avx512_linux. * linux-x86-tdesc.h (init_registers_amd64_avx_mpx_avx512_linux): Renamed prototype. (tdesc_amd64_avx_mpx_avx512_linux): Likewise. (init_registers_i386_avx_mpx_avx512_linux): Likewise. (tdesc_i386_avx_mpx_avx512_linux): Likewise. doc/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * gdb.texinfo (i386 Features): Add description of PKRU register. Change-Id: If75ce5aba7dfd33fdbe3d8b47f04ef3f550c52be Signed-off-by: Michael Sturm <michael.sturm@intel.com>
2017-02-17Add target description for avx-avx512.Michael Sturm32-301/+1712
Add a dedicated target description for the feature combination avx-avx512 as implemented by certain IA CPU models. The corresponding X86_XSTATE_AVX_AVX512_MASK already exists, but shared the tdesc with X86_XSTATE_AVX_MPX_AVX512_MASK. This caused MPX registers displayed as undefined on CPUs that only implemented X86_XSTATE_AVX_AVX512_MASK, which is undesired. This patch solves this issue. This patch also corrects the wrong usage of x32-avx-mpx-avx512, which is replaced by x32-avx-avx512. The MPX feature is not implemented in x32 mode. gdb/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * amd64-linux-tdep.c (features/i386/amd64-avx-avx512-linux.c): New include. (features/i386/x32-avx-mpx-avx512-linux.c): Rename to... (features/i386/x32-avx-avx512-linux.c): ...this. (amd64_linux_core_read_description): Add dedicated cases for X86_XSTATE_AVX_AVX512_MASK and return appropriate tdesc. (_initialize_amd64_linux_tdep): Add calls to initialize_tdesc_amd64_avx_avx512_linux and initialize_tdesc_x32_avx_avx512_linux. * amd64-linux.tdep.h (tdesc_amd64_avx_avx512_linux): New prototype. (tdesc_x32_avx_mpx_avx512_linux): Rename to... (tdesc_x32_avx_avx512_linu): ...this. * amd64-tdep.c (features/i386/amd64-avx-avx512.c): New include. (features/i386/x32-avx-mpx-avx512.c): Rename to... (features/i386/x32-avx-avx512.c): ...this. (amd64_target_description): Add dedicated case for X86_XSTATE_AVX_AVX512_MASK and return appropriate tdesc. (_initialize_amd64_tdep): Add call to initialize_tdesc_amd64_avx_avx512. (initialize_tdesc_x32_avx_mpx_avx512): Rename to... (initialize_tdesc_x32_avx_avx512): ...this. * features/Makefile (WHICH): New tdescs i386/i386-avx-avx512, i386/i386-avx-avx512-linux, i386/amd64-avx-avx512, i386/amd64-avx-avx512-linux. (i386/x32-avx-mpx-avx512): Rename to... (i386/x32-avx-avx512): ...this. (i386/x32-avx-mpx-avx512-linux): Rename to... (i386/x32-avx-avx512-linux): ...this. (i386/i386-avx-avx512-expedite, i386/i386-avx-avx512-linux-expedite, i386/amd64-avx-avx512-expedite, i386/amd64-avx-avx512-linux-expedite): New expedites. (i386/x32-avx-mpx-avx512-expedite): Rename to... (i386/x32-avx-avx512-expedite): ...this. (i386/x32-avx-mpx-avx512-linux-expedite): Rename to... (i386/x32-avx-avx512-linux-expedite): ...this. (XMLTOC): New XML files i386/amd64-avx-avx512-linux.xml, i386/amd64-avx-avx512.xml, i386/i386-avx-avx512-linux.xml, i386/i386-avx-avx512.xml. (i386/x32-avx-mpx-avx512-linux.xml): Rename to... (i386/x32-avx-avx512-linux.xml): ...this. (i386/x32-avx-mpx-avx512.xml): Rename to... (i386/x32-avx-avx512.xml): ...this. ($(outdir)/i386/i386-avx-avx512.dat): New rule. ($(outdir)/i386/i386-avx-avx512-linux.dat): Likewise. ($(outdir)/i386/amd64-avx-avx512.dat): Likewise. ($(outdir)/i386/amd64-avx-avx512-linux.dat): Likewise. ($(outdir)/i386/x32-avx-mpx-avx512.dat): Rename to... ($(outdir)/i386/x32-avx-avx512.dat): ...this. ($(outdir)/i386/x32-avx-mpx-avx512-linux.dat): Rename to... ($(outdir)/i386/x32-avx-avx512-linux.dat): ...this. * features/i386/amd64-avx-avx512-linux.c: New file. * features/i386/amd64-avx-avx512-linux.xml: Likewise. * features/i386/amd64-avx-avx512.c: Likewise. * features/i386/amd64-avx-avx512.xml: Likewise. * features/i386/i386-avx-avx512-linux.c: Likewise. * features/i386/i386-avx-avx512-linux.xml: Likewise. * features/i386/i386-avx-avx512.c: Likewise. * features/i386/i386-avx-avx512.xml: Likewise. * features/i386/x32-avx-mpx-avx512-linux.c: Deleted. * features/i386/x32-avx-avx512-linux.c: New file. * features/i386/x32-avx-mpx-avx512-linux.xml: Deleted. * features/i386/x32-avx-avx512-linux.xml: New file. * features/i386/x32-avx-mpx-avx512.c: Deleted. * features/i386/x32-avx-avx512.c: New file. * features/i386/x32-avx-mpx-avx512.xml: Deleted. * features/i386/x32-avx-avx512.xml: New file. * i386-linux-tdep.c (features/i386/i386-avx-avx512-linux.c): New include. (i386_linux_core_read_description): Add dedicated case for X86_XSTATE_AVX_AVX512_MASK and return appropriate tdesc. (_initialize_i386_linux_tdep): Add call to initialize_tdesc_i386_avx_avx512_linux. * i386-linux-tdep.h (tdesc_i386_avx_avx512_linux): New prototype. * i386-tdep.c (features/i386/i386-avx-avx512.c): New include. (i386_validate_tdesc_p): Correct XSTATE mask used for feature_avx512. (i386_target_description): Add dedicated case for X86_XSTATE_AVX_AVX512_MASK and return appropriate tdesc. (_initialize_i386_tdep): Add call to initialize_tdesc_i386_avx_avx512. * regformats/i386/amd64-avx-avx512-linux.dat: New file * regformats/i386/amd64-avx-avx512.dat: Likewise. * regformats/i386/i386-avx-avx512-linux.dat: Likewise. * regformats/i386/i386-avx-avx512.dat: Likewise. * regformats/i386/x32-avx-mpx-avx512-linux.dat: Deleted. * regformats/i386/x32-avx-avx512-linux.dat: New file. * regformats/i386/x32-avx-mpx-avx512.dat: Deleted. * regformats/i386/x32-avx-avx512.dat: New file. * x86-linux-nat.c (x86_linux_read_description): Add dedidated case for X86_XSTATE_AVX_AVX512_MASK and return appropriate description. gdbserver/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * Makefile.in (clean): Add handling of new source files i386-avx-avx512.c, i386-avx-avx512-linux.c, amd64-avx-avx512.c, amd64-avx-avx512-linux.c. (x32-avx-mpx-avx512.c): Rename to... (x32-avx-avx512.c): ...this. (x32-avx-mpx-avx512-linux.c): Rename to... (x32-avx-avx512-linux.c): ...this. (i386-avx-avx512-linux-ipa.o): New rule. (amd64-avx-avx512-linux-ipa.o): Likewise. (i386-avx-avx512.c): Likewise. (i386-avx-avx512-linux.c): Likewise. (amd64-avx-avx512.c): Likewise. (amd64-avx-avx512-linux.c): Likewise. (x32-avx-avx512.c): Rename rule, source files, dat files from x32-avx-mpx-avx512.*) to this. (x32-avx-avx512-linux.c): Rename rule, source files, dat files from x32-avx-mpx-avx512-linux.*) to this. * configure.srv (srv_i386_regobj): Add i386-avx-avx512.o. (srv_i386_linux_regobj): Add i386-avx-avx512-linux.o. (srv_amd64_regobj): Add amd64-avx-avx512.o, rename x32-avx-mpx-avx512.o to x32-avx-avx512.o. (srv_amd64_linux_regobj): Add amd64-avx-avx512-linux.o, rename x32-avx-mpx-avx512-linux.o to x32-avx-avx512-linux.o. (ipa_i386_linux_regobj): Add i386-avx-avx512-linux-ipa.o. (ipa_amd64_linux_regobj): Add amd64-avx-avx512-linux-ipa.o. (srv_i386_xmlfiles): Add i386/i386-avx-avx512.xml. (srv_amd64_xmlfiles): Add i386/amd64-avx-avx512.xml, rename x32-avx-mpx-avx512.xml to x32-avx-avx512.xml. (srv_i386_linux_xmlfiles): Add i386/i386-avx-avx512-linux.xml. (srv_amd64_linux_xmlfiles): Add i386/amd64-avx-avx512-linux.xml, rename x32-avx-mpx-avx512-linux.xml to x32-avx-avx512-linux.xml. * linux-amd64-ipa.c (get_ipa_tdesc): Add dedicated case for X86_TDESC_AVX_AVX512 and return appropriate tdesc. (initialize_low_tracepoint): Add init_registers_amd64_avx_avx512_linux. * linux-i386-ipa.c (get_ipa_tdesc): Add dedicated case for X86_TDESC_AVX_AVX512 and return appropriate tdesc. (initialize_low_tracepoint): Add init_registers_i386_avx_avx512_linux. * linux-x86-low.c (x86_linux_read_description): Add dedicated cases for X86_XSTATE_AVX_AVX512_MASK and return appropriate tdesc. (x86_get_ipa_tdesc_idx): Rename tdesc_x32_avx_mpx_avx512_linux to tdesc_x32_avx_avx512_linux, add dedicated if-clause for tdesc_amd64_avx_avx512_linux and return appropriate mask. Add dedicated clause for tdesc_i386_avx_avx512_linux and return appropriate mask. (initialize_low_arch): Add init_registers_amd64_avx_avx512_linux, rename init_registers_x32_avx_mpx_avx512_linux, add init_registers_i386_avx_avx512_linux. * linux-x86-tdesc.h (enum x86_linux_tdesc): Add new value for X86_TDESC_AVX_AVX512. (init_registers_amd64_avx_avx512_linux): New prototype. (tdesc_amd64_avx_avx512_linux): Likewise. (init_registers_x32_avx_mpx_avx512_linux): Rename to... (init_registers_x32_avx_avx512_linux): ...this. (tdesc_x32_avx_mpx_avx512_linux): Rename to... (tdesc_x32_avx_avx512_linux): ...this. (init_registers_i386_avx_avx512_linux): New prototype. (tdesc_i386_avx_avx512_linux): Likewise. Change-Id: I01359fab56c961a39568df50af39714ec7b31706 Signed-off-by: Michael Sturm <michael.sturm@intel.com>
2017-02-17Rename target descriptions to reflect actual content of description.Michael Sturm33-166/+174
To better reflect the actual feature set covered by the IA target descriptions, the existing descriptions are renamed. Each feature of the extended state is added to the name of a description or xstate mask starting from AVX. For example, amd64-mpx-avx512-linux becomes amd64-avx-mpx-avx512-linux, while amd64-avx-linux remains unchanged. Likewise, the corresponding xstate masks are changed, e.g. from X86_XSTATE_MPX_AVX512_MASK to X86_XSTATE_AVX_MPX_AVX512_MASK. gdb/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * amd64-linux-tdep.c (features/i386/amd64-avx512-linux.c): Rename include to... (features/i386/amd64-avx-mpx-avx512-linux.c): ...this. (features/i386/x32-avx512-linux.c): Rename include to... (features/i386/x32-avx-mpx-avx512-linux.c): ...this. (amd64_linux_core_read_description): Rename X86_XSTATE_MPX_AVX512_MASK, X86_XSTATE_AVX512_MASK, desc_x32_avx512_linux, tdesc_amd64_avx512_linux. (_initialize_amd64_linux_tdep): Rename initialize_tdesc_amd64_avx512_linux, initialize_tdesc_x32_avx512_linux. * amd64-linux-tdep.h (tdesc_amd64_avx512_linux): Rename to... (tdesc_amd64_avx_mpx_avx512_linux): ...this. (tdesc_x32_avx512_linux): Rename to... (tdesc_x32_avx_mpx_avx512_linux): ...this. * amd64-tdep.c (features/i386/amd64-avx512.c): Rename include to... (features/i386/amd64-avx-mpx-avx512.c): ...this. (features/i386/x32-avx512.c): Rename include to... (features/i386/x32-avx-mpx-avx512.c): ...this. (amd64_target_description): Rename X86_XSTATE_MPX_AVX512_MASK, X86_XSTATE_AVX512_MASK, tdesc_amd64_avx512. (_initialize_amd64_tdep): Rename initialize_tdesc_amd64_avx512. Rename initialize_tdesc_x32_avx512. * common/x86-xstate.h (X86_XSTATE_AVX512_MASK): Rename to... (X86_XSTATE_AVX_AVX512_MASK): ...this. (86_XSTATE_MPX_AVX512_MASK): Rename to... (X86_XSTATE_AVX_MPX_AVX512_MASK): ...this. (X86_XSTATE_ALL_MASK): Rename X86_XSTATE_MPX_AVX512_MASK to X86_XSTATE_AVX_MPX_AVX512_MASK. * features/Makefile (WHICH): Rename i386/i386-avx512, i386/i386-avx512-linux, i386/amd64-avx512, i386/amd64-avx512-linux, i386/x32-avx512, i386/x32-avx512-linux. (i386/i386-avx512-expedite, i386/i386-avx512-linux-expedite, i386/amd64-avx512-expedite, i386/amd64-avx512-linux-expedite, i386/x32-avx512-expedite, i386/x32-avx512-linux-expedite): Rename expedites. (XMLTOC): Rename i386/amd64-avx512-linux.xml, i386/amd64-avx512.xml, i386/i386-avx512-linux.xml, i386/i386-avx512.xml, i386/x32-avx512-linux.xml, i386/x32-avx512.xml. ($(outdir)/i386/i386-avx512.dat): Rename dat file in rule. ($(outdir)/i386/i386-avx512-linux.dat): Likewise. ($(outdir)/i386/amd64-avx512.dat): Likewise. ($(outdir)/i386/amd64-avx512-linux.dat): Likewise. ($(outdir)/i386/x32-avx512.dat): Likewise. ($(outdir)/i386/x32-avx512-linux.dat): Likewise. * features/i386/amd64-avx512-linux.c: Regenerate from renamed XML file. * features/i386/amd64-avx512-linux.xml: Rename XML file. * features/i386/amd64-avx512.c: Regenerate from renamed XML file. * features/i386/amd64-avx512.xml: Rename XML file. * features/i386/i386-avx512-linux.c: Regenerate from renamed XML file. * features/i386/i386-avx512-linux.xml: Rename XML file. * features/i386/i386-avx512.c: Regenerate from renamed XML file. * features/i386/i386-avx512.xml: Rename XML file. * features/i386/x32-avx512-linux.c: Regenerate from renamed XML file. * features/i386/x32-avx512-linux.xml: Rename XML file. * features/i386/x32-avx512.c: Regenerate from renamed XML file. * features/i386/x32-avx512.xml: Rename XML file. * i386-linux-tdep.c (features/i386/i386-avx512-linux.c): Rename to... (features/i386/i386-avx-mpx-avx512-linux.c): ...this. (i386_linux_core_read_description): Rename X86_XSTATE_MPX_AVX512_MASK, X86_XSTATE_AVX512_MASK, tdesc_i386_avx512_linux. (_initialize_i386_linux_tdep): Rename initialize_tdesc_i386_avx512_linux. * i386-linux-tdep.h (tdesc_i386_avx512_linux): Rename to... (tdesc_i386_avx_mpx_avx512_linux): ...this. * i386-tdep.c (features/i386/i386-avx512.c): Rename to... (features/i386/i386-avx-mpx-avx512.c): ...this. (i386_register_reggroup_p): Rename X86_XSTATE_AVX512_MASK. (i386_validate_tdesc_p): Likewise. (i386_target_description): Rename X86_XSTATE_MPX_AVX512_MASK, tdesc_i386_avx512. (_initialize_i386_tdep): Rename initialize_tdesc_i386_avx512. * regformats/i386/amd64-avx512-linux.dat: Regenerate from renamed XML file. * regformats/i386/amd64-avx512.dat: Likewise. * regformats/i386/i386-avx512-linux.dat: Likewise. * regformats/i386/i386-avx512.dat: Likewise. * regformats/i386/x32-avx512-linux.dat: Likewise. * regformats/i386/x32-avx512.dat: Likewise. * x86-Linux-nat.c (x86_linux_read_description): Rename X86_XSTATE_MPX_AVX512_MASK, X86_XSTATE_AVX512_MASK, tdesc_x32_avx512_linux, tdesc_amd64_avx512_linux, tdesc_i386_avx512_linux. gdbserver/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * Makefile.in (clean): Rename i386-avx512.c, i386-avx512-linux.c, amd64-avx512.c, amd64-avx512-linux.c, x32-avx512.c, x32-avx512-linux.c. (i386-avx512-linux-ipa.o): Rename rule and source files. (amd64-avx512-linux-ipa.o): Likewise. (i386-avx512.c): Rename rule, source fils and dat files. (i386-avx512-linux.c): Likewise. (amd64-avx512.c): Likewise. (amd64-avx512-linux.c): Likewise. (x32-avx512.c): Likewise. (x32-avx512-linux.c): Likewise. * configfure.srv (srv_i386_regobj): Rename i386-avx512.o. (i386_linux_regobj): Rename i386-avx512-linux.o. (srv_amd64_regobj): Rename amd64-avx512.o, x32-avx512.o. (srv_amd64_linux_regobj): Rename amd64-avx512-linux.o, x32-avx512-linux.o. (ipa_i386_linux_regobj): Rename i386-avx512-linux-ipa.o. (ipa_amd64_linux_regobj): Rename amd64-avx512-linux-ipa.o. (srv_i386_xmlfiles): Rename i386/i386-avx512.xml. (srv_amd64_xmlfiles): Rename i386/amd64-avx512.xml, i386/x32-avx512.xml. (srv_i386_linux_xmlfiles): Rename i386/i386-avx512-linux.xml. (srv_amd64_linux_xmlfiles): Rename i386/amd64-avx512-linux.xml, i386/x32-avx512-linux.xml). * linux-amd64-ipa.c (get_ipa_tdesc): Rename X86_TDESC_AVX512 and returned tdesc for that case. (initialize_low_tracepoint): Rename init_registers_amd64_avx512_linux. * linux-i386-ipa.c (get_ipa_tdesc): Rename X86_TDESC_AVX512 and tdesc returned for that case. (initialize_low_tracepoint): Rename init_registers_i386_avx512_linux. * linux-x86-low.c (x86_linux_read_description): Rename X86_XSTATE_AVX512_MASK and tdesc returned for that case. (x86_get_ipa_tdesc_idx): Rename tdesc_amd64_avx512_linux, tdesc_x32_avx512_linux and mask returned for these descriptions. Rename tdesc_i386_avx512_linux and mask returned for that description. (initialize_low_arch): Rename init_registers_amd64_avx512_linux, init_registers_x32_avx512_linux, init_registers_i386_avx512_linux. * linux-x86-tdesc.h (enum x86_linux_tdesc): Rename X86_TDESC_AVX512. (init_registers_amd64_avx512_linux): Rename to... (init_registers_amd64_avx_mpx_avx512_linux): ...this. (tdesc_amd64_avx512_linux): Rename to... (tdesc_amd64_avx_mpx_avx512_linux): ...this. (init_registers_x32_avx512_linux): Rename to... (init_registers_x32_avx_mpx_avx512_linux): ...this. (tdesc_x32_avx512_linux): Rename to... (tdesc_x32_avx_mpx_avx512_linux): ...this. (init_registers_i386_avx512_linux): Rename to... (init_registers_i386_avx_mpx_avx512_linux): ...this. (tdesc_i386_avx512_linux): Rename to... (tdesc_i386_avx_mpx_avx512_linux): ...this. Change-Id: Idb83be3b3b72d5487542d4b568193df2777a3d9d Signed-off-by: Michael Sturm <michael.sturm@intel.com>
2017-02-17Change xstate_bv handling to use 8 bytes of data.Michael Sturm2-16/+25
The size of the state-component bitmap as specified in Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Chapter 13.4.2 is 8 bytes. So far, the data types used for xstate_bv_p (gdb_byte*), clear_bv (unsigned int) and tdep->xcr0 (uint64_t) were inconsistent. But, since the xstate components were still fitting into a single byte, the code still worked as expected. However, with the addition of the PKU feature (bit 9), using one byte for the bitmap will no longer be sufficient. This patch changes related code to use 64 bit data types consistently and changes read/write acces of the XSAVE header in the xsave buffer to use the endianess-aware functions extract_unsigned_integer and store_unsigned_integer. This is required to make sure that eventual differences in endianess between host and target are taken care off. gdb/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * i387-tdep.c (i387_supply_xsave): Change type of clear_bv to ULONGEST. Replace gdb_byte *xstate_bv_p with ULONGEST xstate_bv and use extract_unsigned_integer and store_unsigned_integer to read/write its value from the xsave buffer. (i387_collect_xsave): Replace gdb_byte *xstate_bv_p with ULONGEST initial_xstate_bv and use extract_unsigned_integer/store_unsigned_integer to read/write its value from the xsave buffer. Change type of clear_bv to ULONGEST. gdbserver/Changelog: 2016-04-18 Michael Sturm <michael.sturm@intel.com> * i387-fp.c (i387_cache_to_xsave): Change type of clear_bv to unsigned long long. (i387_fxsave_to_cache): Likewise. Change-Id: I0de254158960b4f7bcbc9fe2fb857034fa1f7ca5 Signed-off-by: Michael Sturm <michael.sturm@intel.com>
2017-02-17Sync up x86-gcc-cpuid.h with cpuid.h from gcc-6 branch.Michael Sturm1-58/+50
Pedro suggested a separate patch synching with GCCs cpuid.h instead of just adding new bits for PKU feature. gdb/Changelog: 2016-11-14 Michael Sturm <michael.sturm@intel.com> * nat/x86-gcc-cpuid.h: Replace with copy of cpuid.h from gcc-6 branch. Change-Id: I16f8f7f2d0aa7c2e815701d15ed831a6c6b33d21 Signed-off-by: Michael Sturm <michael.sturm@intel.com>
2017-02-15PR gdb/21164: maint print {symbols,msymbols,psymbols} without args crashSergio Durigan Junior5-6/+27
This is a fix for PR gdb/21164. The problem started to happen after: commit 34c41c681f4a0a0dfe0405c7d2aecf458520557a 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-15Fix illegal upper case gdb cmd in chained-calls.expThomas Preud'homme2-1/+5
3d7b173c29900879c9a5958dd6029fd36666e57c made upper case commands now illegal. However gdb.cp/chained-calls.exp still contains one test using P to print an expression. This patch fixes the testcase to use p instead. 2017-02-13 Thomas Preud'homme <thomas.preudhomme@arm.com> gdb/ * gdb.cp/chained-calls.exp: Use p instead of P.
2017-02-15Add missing ChangeLog entries.Tim Wiederhake3-0/+88
This adds the missing ChangeLog entries for the "Python bindings" patch series.
2017-02-14PR python/13598 - add before_prompt eventTom Tromey8-0/+57
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-14Big-endian targets: Fix implptrpiece.expAndreas Arnez2-2/+19
The test case implptrpiece.exp accesses the second byte of the short integer number 1 and expects it to be zero. This is valid for little-endian targets, but fails on big-endian targets. This is fixed by distinguishing the expected value by endianness. gdb/testsuite/ChangeLog: * gdb.dwarf2/implptrpiece.exp: Fix check for big-endian targets.
2017-02-14Add documentation for new record Python bindings.Tim Wiederhake2-0/+249
Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/ChangeLog: * NEWS: Add record Python bindings entry. gdb/doc/ChangeLog: * python.texi (Recordings In Python): New section. Change-Id: Ibacb5930085bff36b0003fde30db9a8178cb280b
2017-02-14python: Add tests for record Python bindingsTim Wiederhake4-0/+296
Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/testsuite/ChangeLog: * gdb.python/py-record-btrace.c, gdb.python/py-record-btrace.exp, gdb.python/py-record-full.c, gdb.python/py-record-full.exp: New file. Change-Id: Icd919b4e1d5642f5cbc097a6aede1416eba402e5
2017-02-14python: Implement btrace Python bindings for record history.Tim Wiederhake8-0/+1177
This patch implements the gdb.Record Python object methods and fields for record target btrace. Also, implement a stub for record target full. Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/ChangeLog: * Makefile.in (SUBDIR_PYTHON_OBS): Add py-record-btrace.o, py-record-full.o. (SUBDIR_PYTHON_SRCS): Add py-record-btrace.c, py-record-full.c. * python/py-record-btrace.c, python/py-record-btrace.h, python/py-record-full.c, python/py-record-full.h: New file. * python/py-record.c: Add include for py-record-btrace.h and py-record-full.h. (recpy_method, recpy_format, recpy_goto, recpy_replay_position, recpy_instruction_history, recpy_function_call_history, recpy_begin, recpy_end): Use functions from py-record-btrace.c and py-record-full.c. * python/python-internal.h (PyInt_FromSsize_t, PyInt_AsSsize_t): New definition. (gdbpy_initialize_btrace): New export. * python/python.c (_initialize_python): Add gdbpy_initialize_btrace. Change-Id: I8bd893672ffc7e619cc1386767897249e125973a
2017-02-14python: Create Python bindings for record history.Tim Wiederhake4-0/+247
This patch adds three new functions to the gdb module in Python: - start_recording - stop_recording - current_recording start_recording and current_recording return an object of the new type gdb.Record, which can be used to access the recorded data. Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/ChangeLog * Makefile.in (SUBDIR_PYTHON_OBS): Add python/py-record.o. (SUBDIR_PYTHON_SRCS): Add python/py-record.c. * python/py-record.c: New file. * python/python-internal.h (gdbpy_start_recording, gdbpy_current_recording, gdpy_stop_recording, gdbpy_initialize_record): New export. * python/python.c (_initialize_python): Add gdbpy_initialize_record. (python_GdbMethods): Add gdbpy_start_recording, gdbpy_current_recording and gdbpy_stop_recording. Change-Id: I772aa9aa068621443f10a330b11dc7dc9a63face
2017-02-14Add method to query current recording method to target_ops.Tim Wiederhake7-0/+92
Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/ChangeLog * record-btrace.c (record_btrace_record_method): New function. (init_record_btrace_ops): Initialize to_record_method. * record-full.c (record_full_record_method): New function. (init_record_full_ops, init_record_full_core_ops): Add record_full_record_method. * record.h (enum record_method): New enum. * target-debug.h (target_debug_print_enum_record_method: New define. * target-delegates.c: Regenerate. * target.c (target_record_method): New function. * target.h: Include record.h. (struct target_ops) <to_record_method>: New field. (target_record_method): New export. Change-Id: I05daa70e4e08a19901e848c731bb7d60cd87cc5a
2017-02-14Add record_start and record_stop functions.Tim Wiederhake2-0/+50
Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/ChangeLog * record.h (record_start, record_stop): New export. * record.c (record_start, record_stop): New function. Change-Id: If235d4bde8ec61dab6dbd23e087430e66d2e91a7
2017-02-14btrace: Use binary search to find instruction.Tim Wiederhake2-6/+46
Currently, btrace_find_insn_by_number will iterate over all function call segments to find the one that contains the needed instruction. This linear search is too slow for the upcoming Python bindings that will use this function to access instructions. This patch introduces a vector in struct btrace_thread_info that holds pointers to all recorded function segments and allows to use binary search. The proper solution is to turn the underlying tree into a vector of objects and use indices for access. This requires more work. A patch set is currently being worked on and will be published later. Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/ChangeLog: * btrace.c (btrace_fetch): Copy function call segments pointer into a vector. (btrace_clear): Clear the vector. (btrace_find_insn_by_number): Use binary search to find the correct function call segment. * btrace.h (brace_fun_p): New typedef. (struct btrace_thread_info) <functions>: New field. Change-Id: I8a7f67e80bfe4ff62c4192f74a2153a70bf2a035
2017-02-14btrace: Export btrace_decode_error function.Tim Wiederhake3-55/+57
Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/ChangeLog: * record-btrace.c (btrace_ui_out_decode_error): Move most of it ... * btrace.c (btrace_decode_error): ... here. New function. * btrace.h (btrace_decode_error): New export. Change-Id: I2b4b43a55dbfd9f526a540d2ad52a6708f31feba
2017-02-14btrace: Count gaps as one instruction explicitly.Tim Wiederhake3-81/+46
This gives all instructions, including gaps, a unique number. Add a function to retrieve the error code if a btrace instruction iterator points to an invalid instruction. Signed-off-by: Tim Wiederhake <tim.wiederhake@intel.com> gdb/ChangeLog: * btrace.c (ftrace_call_num_insn, btrace_insn_get_error): New function. (ftrace_new_function, btrace_insn_number, btrace_insn_cmp, btrace_find_insn_by_number): Remove special case for gaps. * btrace.h (btrace_insn_get_error): New export. (btrace_insn_number, btrace_find_insn_by_number): Adjust comment. * record-btrace.c (btrace_insn_history): Print number for gaps. (record_btrace_info, record_btrace_goto): Handle gaps. Change-Id: I8eb0e48a95f4278522fea74ea13526bfe6898ecc
2017-02-14btrace: preserve call stack on function switchMarkus Metzger2-2/+8
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-13Improve load command's help textLuis Machado4-3/+20
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-13Fix gdb.linespec/explicit.expLuis Machado3-15/+38
This patch addresses timeout failures i noticed while testing aarch64-elf. FAIL: gdb.linespec/explicit.exp: complete unique function name (timeout) FAIL: gdb.linespec/explicit.exp: complete non-unique function name (timeout) FAIL: gdb.linespec/explicit.exp: complete non-existant function name (timeout) FAIL: gdb.linespec/explicit.exp: complete unique file name (timeout) FAIL: gdb.linespec/explicit.exp: complete non-unique file name (timeout) The timeouts were caused by an attempt to match a bell character (x07) that doesn't show up on my particular test setup. The bell character is output whenever one tries to complete a pattern and there are multiple possible matches. When there is only one possible match, GDB will complete the input pattern without outputting the bell character. The reason for the discrepancy in this test's behavior is due to the use of "main" for a unique name test. On glibc-based systems, GDB may notice the "main_arena" symbol, which is a data global part of glibc's malloc implementation. Therefore a bell character will be output because we have a couple possible completion matches. GDB should not be outputting such a data symbol as a possible match, but this problem may/will be addressed in a future change and is besides the point of this particular change. On systems that are not based on glibc, GDB will not see any other possible matches for completing "main", so there will be no bell characters. The use of main is a bit fragile though, so the patch adds a new local function with a name that has a greater chance of being unique and adjusts the test to iuse it. I've also added the regular expression switch (-re) to all the gdb_test_multiple calls that were missing it. Hopefully this will reduce the chances of someone wasting time trying to match a regular expression (a much more common use case) when, in reality, the pattern is supposed to be matched literally. gdb/testsuite/ChangeLog 2017-02-13 Luis Machado <lgustavo@codesourcery.com> * gdb.linespec/explicit.c (my_unique_function_name): New function. (main): Call my_unique_function_name. * gdb.linespec/explicit.exp: Use my_unique_function_name to test completion of patterns with a single match. Add missing -re switches to gdb_test_multiple calls.
2017-02-13Make gdb.arch/i386-biarch-core.exp more robustLuis Machado2-1/+35
This test attempts to load a x86 core file no matter what target architectures the tested GDB supports. If GDB doesn't know how to handle a i386 target, it is very likely the core file will not be recognized. In this case we should still attempt to load a core file to make sure GDB doesn't crash or throws an internal error. But we should not proceed to try to read memory unconditionally. This patch makes the test check for proper i386 arch support in GDB and bails out if i386 is not supported and the core file format is not recognized. This addresses the spurious aarch64-elf failures i'm seeing for this test. gdb/testsuite/ChangeLog: 2017-02-13 Luis Machado <lgustavo@codesourcery.com> * gdb.arch/i386-biarch-core.exp: Check for i386 arch support and return if core file is not recognized.
2017-02-10Do not send queries on secondary UIsSimon Marchi4-1/+24
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-10new-ui.exp: Use proc_with_prefixSimon Marchi2-4/+9
gdb/testsuite/ChangeLog: * gdb.base/new-ui.exp (do_test, do_test_invalid_args): Use proc_with_prefix.
2017-02-10Remove unused variable in rust-lang.cTom Tromey2-1/+4
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-10Fix Python test to use lowercase commandTom Tromey2-2/+6
While testing this series I saw some errors from the Python test suite. There were a couple of tests using "P" as a command; this changes them to "p". gdb/testsuite/ChangeLog 2017-02-10 Tom Tromey <tom@tromey.com> * gdb.python/py-xmethods.exp: Use "p" command, not "P".
2017-02-10Remove unnecessary local variablesTom Tromey3-2/+7
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-10Remove some gotos from PythonTom Tromey3-99/+115
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-10Change one more spot to use gdbpy_refTom Tromey2-7/+13
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-10Use gdbpy_ref to simplify some logicTom Tromey11-116/+94
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-10Turn gdbpy_ref into a templateTom Tromey30-234/+260
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-10Remove some ui_out-related cleanups from PythonTom Tromey4-156/+186
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-10gdb/MAINTAINERS: Update my e-mail addressMartin Galvan2-1/+5
gdb/ChangeLog: 2017-02-10 Martin Galvan <martingalvan@sourceware.org> * MAINTAINERS (Write After Approval): Update my e-mail address.
2017-02-10PR gdb/21122: Fix documentation mistakes for breakpoint commandsMartin Galvan6-21/+45
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-09Remove return in function returning voidSimon Marchi2-1/+5
gdb/ChangeLog: * interps.c (current_interp_set_logging): Remove "return".
2017-02-09Fix NULL pointer dereferenceGary Benson2-0/+8
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-08Eliminate interp::quiet_pPedro Alves3-48/+11
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-08Command abbreviation in defineJerome Guitton6-30/+89
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-08Command names: make them case sensitiveJerome Guitton2-27/+5
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-07gdb: fix ARI warning in sparc-tdep.cJose E. Marchesi2-2/+7
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-06[BZ 21005] Add support for Intel 64 rdrand and rdseed record/replayLuis Machado6-4/+303
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-05gdb: provide and use sparc{32,64} target description XML files.Ivo Raisr19-0/+647
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.