2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Entry values NEWS entries, DWARF disassembly support.
+ * NEWS: New entry values entry.
+ (set print entry-values, show print entry-values)
+ (set debug entry-values, show debug entry-values): New entries.
+ * dwarf2loc.c (disassemble_dwarf_expression): New parameters start and
+ indent. Remove variable start. Move header printing out. Respect
+ INDENT. Support DW_OP_GNU_entry_value.
+ (locexpr_describe_location_1): Move the header printing here, extend
+ the disassemble_dwarf_expression passed parameters.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Display @entry parameter values even for references.
+ * ada-valprint.c (ada_val_print_1) <TYPE_CODE_REF>: Try also
+ coerce_ref_if_computed.
+ * c-valprint.c (c_val_print) <TYPE_CODE_REF>: Likewise.
+ * dwarf2expr.c (dwarf_block_to_dwarf_reg_deref): New function.
+ (execute_stack_op) <DW_OP_GNU_entry_value>: Add -1 deref_size to the
+ existing push_dwarf_reg_entry_value call. Add new detection calling
+ dwarf_block_to_dwarf_reg_deref. Update the error message.
+ (ctx_no_push_dwarf_reg_entry_value): New parameter deref_size.
+ * dwarf2expr.h
+ (struct dwarf_expr_context_funcs) <push_dwarf_reg_entry_value>: Add new
+ parameter deref_size, describe it in the comment.
+ (ctx_no_push_dwarf_reg_entry_value): Add new parameter deref_size.
+ (dwarf_block_to_dwarf_reg_deref): New declaration.
+ * dwarf2loc.c (dwarf_entry_parameter_to_value): Add new parameter
+ deref_size, describe it in the function comment. New variables
+ data_src and size, fetch the alternative block accoring to DEREF_SIZE.
+ (dwarf_expr_push_dwarf_reg_entry_value): Add new parameter deref_size,
+ describe it in the function comment. Fetch the alternative block
+ accoring to DEREF_SIZE.
+ (entry_data_value_coerce_ref, entry_data_value_copy_closure)
+ (entry_data_value_free_closure, entry_data_value_funcs): New.
+ (value_of_dwarf_reg_entry): New variables checked_type, target_type,
+ outer_val, target_val, val and addr. Try to fetch and create also
+ referenced value content.
+ (pieced_value_funcs): NULL value for coerce_ref.
+ (needs_dwarf_reg_entry_value): Add new parameter deref_size.
+ * f-valprint.c (f_val_print) <TYPE_CODE_REF>: Try also
+ coerce_ref_if_computed.
+ * opencl-lang.c (opencl_value_funcs): NULL value for coerce_ref.
+ * p-valprint.c (pascal_val_print) <TYPE_CODE_REF>: Likewise.
+ * stack.c (read_frame_arg): Compare also dereferenced values.
+ * value.c (value_computed_funcs): Make the parameter v const, use
+ value_lval_const for it.
+ (value_lval_const, coerce_ref_if_computed): New function.
+ (coerce_ref): New variable retval. Call also coerce_ref_if_computed.
+ * value.h (struct lval_funcs): New field coerce_ref.
+ (value_computed_funcs): Make the parameter v const.
+ (value_lval_const, coerce_ref_if_computed): New declarations.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Support @entry in input expressions.
+ * c-exp.y (ENTRY, unknown_cpp_name): New.
+ (exp: UNKNOWN_CPP_NAME): Change to `exp: unknown_cpp_name'.
+ (unknown_cpp_name: UNKNOWN_CPP_NAME, unknown_cpp_name: ENTRY)
+ (variable: name_not_typename '@' ENTRY, name: ENTRY)
+ (name_not_typename: ENTRY): New.
+ (yylex): Recognize ENTRY.
+ * eval.c (evaluate_subexp_standard): Support also OP_VAR_ENTRY_VALUE.
+ * expprint.c (print_subexp_standard, dump_subexp_body_standard):
+ Likewise.
+ * parse.c (operator_length_standard): Likewise.
+ * std-operator.def: New operator OP_VAR_ENTRY_VALUE.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Display referenced values in backtraces.
+ * printcmd.c (print_variable_and_value): Set OPTS.DEREF_REF to 1.
+ * stack.c (print_frame_arg): Likewise.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Make some lval_funcs methods to default on NULL.
+ * valops.c (value_fetch_lazy): Check if lval_computed read method is
+ NULL.
+ (value_assign): Check if lval_computed write method is NULL.
+ * value.h (struct lval_funcs): Comment NULL values for read and write
+ methods.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Display @entry parameter values (without references).
+ * dwarf2expr.c (dwarf_block_to_fb_offset, dwarf_block_to_sp_offset):
+ New functions.
+ * dwarf2expr.h (dwarf_block_to_fb_offset, dwarf_block_to_sp_offset):
+ New declarations.
+ * dwarf2loc.c (dwarf2_find_location_expression): Support location list
+ entry record.
+ (dwarf_entry_parameter_to_value, value_of_dwarf_reg_entry)
+ (value_of_dwarf_block_entry, locexpr_read_variable_at_entry): New
+ functions.
+ (dwarf2_locexpr_funcs): Install locexpr_read_variable_at_entry.
+ (loclist_read_variable_at_entry): New function.
+ (dwarf2_loclist_funcs): Install loclist_read_variable_at_entry.
+ * dwarf2read.c (read_call_site_scope): Support also DW_OP_fbreg in
+ DW_AT_location, call dwarf_block_to_sp_offset for it.
+ * frame.h (print_entry_values_no, print_entry_values_only)
+ (print_entry_values_preferred, print_entry_values_if_needed)
+ (print_entry_values_both, print_entry_values_compact)
+ (print_entry_values_default, print_entry_values): New declarations.
+ (struct frame_arg): New field entry_kind.
+ (read_frame_arg): New parameter entryargp.
+ * mi/mi-cmd-stack.c (list_arg_or_local): New gdb_assert for
+ arg->entry_kind. Optionally print the `@entry' suffix.
+ (list_args_or_locals): New variable entryarg, initialize it.
+ Initialize also entry_kind of arg and entryarg. Conditionalize
+ list_arg_or_local for arg, add list_arg_or_local for entryarg. Call
+ xfree for entryarg.error.
+ * stack.c (print_entry_values_no, print_entry_values_only)
+ (print_entry_values_preferred, print_entry_values_if_needed)
+ (print_entry_values_both, print_entry_values_compact)
+ (print_entry_values_default, print_entry_values_choices)
+ (print_entry_values): New variables.
+ (print_frame_arg): New gdb_assert for arg->entry_kind. Optionally
+ print the `@entry' suffix, possibly in combination for
+ print_entry_values_compact.
+ (read_frame_arg): New parameter entryargp, new variables entryval,
+ entryval_error and val_equal. Read in also entryargp, respect
+ print_entry_values, compare the values using val_equal, fill in also
+ argp->entry_kind (together with entryargp->entry_kind).
+ (print_frame_args): New variable entryarg, initialize it.
+ Conditionalize print_frame_arg for arg, add print_frame_arg for
+ entryarg. Call xfree for entryarg.error.
+ (_initialize_stack): Call add_setshow_enum_cmd for `entry-values'.
+ * symtab.h (struct symbol_computed_ops): New field
+ read_variable_at_entry.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Code reshuffle.
+ * frame.h (struct frame_arg): New definition.
+ (read_frame_arg): New declaration.
+ * mi/mi-cmd-stack.c (list_arg_or_local): New functiom from ...
+ (list_args_or_locals): ... the code here. New variable arg, call
+ read_frame_arg and list_arg_or_local with it. Unify the
+ PRINT_SIMPLE_VALUES and PRINT_ALL_VALUES cases. Call xfree for
+ arg.error.
+ * stack.c (print_frame_arg): New functiom from the code of
+ print_frame_args.
+ (read_frame_arg): New function.
+ (print_frame_args): Remove variable val. New variable arg, call
+ read_frame_arg and print_frame_arg with it. Call xfree for arg.error.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Protect entry values against self tail calls.
+ * dwarf2loc.c (VEC (CORE_ADDR), func_verify_no_selftailcall): New.
+ (dwarf_expr_dwarf_reg_entry_value): Call func_verify_no_selftailcall.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Recognize virtual tail call frames.
+ * Makefile.in (SFILES): Add dwarf2-frame-tailcall.c.
+ (HFILES_NO_SRCDIR): Add dwarf2-frame-tailcall.h.
+ (COMMON_OBS): Add dwarf2-frame-tailcall.o.
+ * dwarf2-frame-tailcall.c: New file.
+ * dwarf2-frame-tailcall.h: New file.
+ * dwarf2-frame.c: Include dwarf2-frame-tailcall.h.
+ (execute_cfa_program): New function comment. Return INSN_PTR. Reset
+ REGS.PREV only after CIE execution.
+ (struct dwarf2_frame_cache): New field tailcall_cache.
+ (dwarf2_frame_cache): New variables entry_pc, entry_cfa_sp_offset,
+ entry_cfa_sp_offset_p and instr. Execute FDE instructions in two
+ parts, try to find entry_cfa_sp_offset. Call
+ dwarf2_tailcall_sniffer_first.
+ (dwarf2_frame_prev_register): Call dwarf2_tailcall_prev_register_first
+ when appropriate.
+ (dwarf2_frame_dealloc_cache): New function.
+ (dwarf2_frame_sniffer): Preinitialize cache by dwarf2_frame_cache.
+ (dwarf2_frame_unwind): Install dwarf2_frame_dealloc_cache.
+ (dwarf2_signal_frame_unwind): Do not install dwarf2_frame_dealloc_cache.
+ (dwarf2_append_unwinders): Add dwarf2_tailcall_frame_unwind.
+ (dwarf2_frame_cfa): Support also dwarf2_tailcall_frame_unwind.
+ * dwarf2loc.c (func_addr_to_tail_call_list)
+ (tailcall_dump, call_sitep, VEC (call_sitep), chain_candidate)
+ (call_site_find_chain_1, call_site_find_chain): New.
+ * dwarf2loc.h (struct call_site_chain): New.
+ (call_site_find_chain): New declaration.
+ * frame.c (get_frame_address_in_block): Support also TAILCALL_FRAME.
+ * frame.h (enum frame_type): New entry TAILCALL_FRAME.
+ * python/py-frame.c (gdbpy_initialize_frames): Add TAILCALL_FRAME.
+ * stack.c (frame_info): Support also TAILCALL_FRAME.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Tail call sites reader implementation.
+ * dwarf2read.c (read_call_site_scope): Recognize DW_AT_GNU_tail_call,
+ fill in TYPE_TAIL_CALL_LIST.
+ * gdbtypes.h (struct func_type): New field tail_call_list.
+ (struct call_site): New field tail_call_next.
+ (TYPE_TAIL_CALL_LIST): New definition.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Implement basic support for DW_TAG_GNU_call_site.
+ * block.c: Include gdbtypes.h and exceptions.h.
+ (call_site_for_pc): New function.
+ * block.h (call_site_for_pc): New declaration.
+ * defs.h: Include hashtab.h.
+ (make_cleanup_htab_delete, core_addr_hash, core_addr_eq): New
+ declarations.
+ * dwarf2-frame.c (dwarf2_frame_ctx_funcs): Install
+ ctx_no_push_dwarf_reg_entry_value.
+ * dwarf2expr.c (read_uleb128, read_sleb128): Support R as NULL.
+ (dwarf_block_to_dwarf_reg): New function.
+ (execute_stack_op) <DW_OP_GNU_entry_value>: Implement it.
+ (ctx_no_push_dwarf_reg_entry_value): New function.
+ * dwarf2expr.h (struct dwarf_expr_context_funcs): New field
+ push_dwarf_reg_entry_value.
+ (ctx_no_push_dwarf_reg_entry_value, dwarf_block_to_dwarf_reg): New
+ declarations.
+ * dwarf2loc.c: Include gdbcmd.h.
+ (dwarf_expr_ctx_funcs): New forward declaration.
+ (entry_values_debug, show_entry_values_debug, call_site_to_target_addr)
+ (dwarf_expr_reg_to_entry_parameter)
+ (dwarf_expr_push_dwarf_reg_entry_value): New.
+ (dwarf_expr_ctx_funcs): Install dwarf_expr_push_dwarf_reg_entry_value.
+ (dwarf2_evaluate_loc_desc_full): Handle NO_ENTRY_VALUE_ERROR.
+ (needs_dwarf_reg_entry_value): New function.
+ (needs_frame_ctx_funcs): Install it.
+ (_initialize_dwarf2loc): New function.
+ * dwarf2loc.h (entry_values_debug): New declaration.
+ * dwarf2read.c (struct dwarf2_cu): New field call_site_htab.
+ (read_call_site_scope): New forward declaration.
+ (process_full_comp_unit): Copy call_site_htab.
+ (process_die): Support DW_TAG_GNU_call_site.
+ (read_call_site_scope): New function.
+ (dwarf2_get_pc_bounds): Support NULL HIGHPC.
+ (dwarf_tag_name): Support DW_TAG_GNU_call_site.
+ (cleanup_htab): Delete.
+ (write_psymtabs_to_index): Use make_cleanup_htab_delete instead of it.
+ * exceptions.h (enum errors): New NO_ENTRY_VALUE_ERROR.
+ * gdb-gdb.py (StructMainTypePrettyPrinter): Support
+ FIELD_LOC_KIND_DWARF_BLOCK.
+ * gdbtypes.h (enum field_loc_kind): New entry
+ FIELD_LOC_KIND_DWARF_BLOCK.
+ (struct main_type): New loc entry dwarf_block.
+ (struct call_site, FIELD_DWARF_BLOCK, SET_FIELD_DWARF_BLOCK)
+ (TYPE_FIELD_DWARF_BLOCK): New.
+ * python/py-type.c: Include dwarf2loc.h.
+ (check_types_equal): Support FIELD_LOC_KIND_DWARF_BLOCK. New
+ internal_error call on unknown FIELD_LOC_KIND.
+ * symtab.h (struct symtab): New field call_site_htab.
+ * utils.c (do_htab_delete_cleanup, make_cleanup_htab_delete)
+ (core_addr_hash, core_addr_eq): New functions.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Code reshuffle.
+ * gdb-gdb.py (StructMainTypePrettyPrinter): Change
+ TYPE_SPECIFIC_CALLING_CONVENTION to TYPE_SPECIFIC_FUNC. Move
+ calling_convention under func_stuff there.
+ * gdbtypes.c (make_function_type): Call INIT_FUNC_SPECIFIC.
+ (init_type) <TYPE_CODE_FUNC>: Likewise.
+ (recursive_dump_type): Change TYPE_SPECIFIC_CALLING_CONVENTION to
+ TYPE_SPECIFIC_FUNC. New comment for tail_call_list.
+ * gdbtypes.h (enum type_specific_kind): Change
+ TYPE_SPECIFIC_CALLING_CONVENTION to TYPE_SPECIFIC_FUNC.
+ (struct main_type) <type_specific>: Change calling_convention to
+ func_stuff. Move calling_convention to ...
+ (struct func_type): ... this new struct.
+ (INIT_FUNC_SPECIFIC): New #define.
+ (TYPE_CALLING_CONVENTION): Change calling_convention to func_stuff.
+
+2011-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Fix DW_OP_GNU_implicit_pointer for DWARF32 v3+ on 64-bit arches.
* dwarf2-frame.c (execute_stack_op): Initialize ctx->ref_addr_size.
* dwarf2expr.c (execute_stack_op) <DW_OP_GNU_implicit_pointer>: Use