* dwarf2read.c (dwarf2_per_objfile): New member types,
signatured_types.
(TYPES_SECTION): New macro.
(dwarf2_per_cu_data): Change size of length field from 30 bits
to 29 bits. New member from_debug_types.
(signatured_type): New struct.
(struct attribute): New union member signatured_type.
(DW_SIGNATURED_TYPE): New macro.
(dwarf2_attr_no_follow): New function.
(read_type_unit_scope): New function.
(follow_die_ref_or_sig, follow_die_sig): New functions.
(dwarf2_locate_sectoins): Handle .debug_types.
(dwarf2_build_psymtabs): Read .debug_types.
(read_type_comp_unit_head): New function.
(hash_type_signature, eq_type_signature): New functions.
(create_debug_types_hash_table): New function.
(lookup_signatured_type): New function.
(process_psymtab_comp_unit): Handle type units too.
(process_type_comp_unit, build_type_psymtabs): New functions.
(dwarf2_build_psymtabs_hard): Call build_type_psymtabs.
(load_partial_comp_unit): Assert not called for a type unit.
(skip_one_die): Handle DW_FORM_sig8.
(queue_comp_unit): Don't call load_full_comp_unit here, or
update read_in_chain.
(psymtab_to_symtab_1): Call read_signatured_type_at_offset for
type units, or load_full_comp_unit for comp units after
queue_comp_unit returns.
(load_full_comp_unit): Assert not called for type units.
(load_full_comp_unit): Update read_in_chain here.
(process_die): Handle DW_TAG_type_unit.
(read_structure_type): Look for signatured types.
(read_enumeration_type): Ditto.
(init_cu_die_reader): Handle .debug_types.
(read_comp_unit): Assert hash not computed yet.
(read_die_and_children): Expand debugging printf to handle .debug_types.
(read_partial_die): Handle DW_TAG_type_unit:
(find_patial_die): Handle .debug_types.
(read_attribute_value): Handle DW_FORM_sig8.
(die_type): Call follow_die_ref_or_sig instead of follow_die_ref.
(die_containing_type): Ditto.
(dwarf_tag_name): Handle DW_TAG_type_unit.
(dwarf_attr_name): Handle DW_AT_signature.
(dwarf_form_name): Handle DW_FORM_sec_offset, DW_FORM_exprloc,
DW_FORM_flag_present, DW_FORM_sig8.
(dump_die_shallow): Handlel DW_FORM_sig8.
(maybe_queue_comp_unit): Change return type to int from void.
All callers updated.
(follow_die_ref): Handle .debug_types.
(lookup_signatured_type_at_offset): New function.
(read_signatured_type_at_offset): New function.
(read_signatured_type): New function.
* dwarf2read.c (struct die_reader_specs): New struct.
(locate_pdi_sibling): New arg buffer. All callers updated.
(load_partial_dies, read_partial_die): Ditto.
(read_8_bytes): Change return type to ULONGEST.
(read_comp_unit): Delete arg abfd. All callers updated.
(read_die_and_children_1): Delete args abfd, cu. New arg reader.
All callers updated.
(read_die_and_children, read_die_and_siblings): Ditto.
(read_full_die): Ditto. Move closer to callers.
(skip_one_die): New arg buffer. All callers updated.
(load_full_comp_unit): Change return type to void. All callers
updated.
(partial_read_comp_unit_head): New args buffer, buffer_size.
All callers updated.
(process_psymtab_comp_unit): New function, split out from
dwarf2_build_psymtabs_hard.
(dwarf2_build_psymtabs_hard): Call it.
(load_partial_comp_unit): Renamed from load_comp_unit.
All callers updated.
(skip_children): New arg buffer. All callers updated.
(init_cu_die_reader): New function.
(is_ref_attr): New function.
(dwarf2_get_ref_die_offset): Call it.
(alloc_one_comp_unit): New function.
* dwarf2read.c (read_import_statement): Properly set import location
and destination.
* cp-support.h (cp_add_using, cp_add_using_directive): Now take char*
inner, char* outer arguments. Updated callers.
2009-06-29 Sami Wagiaalla <swagiaal@redhat.com>
* gdb.cp/namespace-nested-import.cc: New test.
* gdb.cp/namespace-nested-import.exp: New test.
* NEWS: Document inlined function support.
* Makefile.in (SFILES): Add inline-frame.c.
(COMMON_OBS): Add inline-frame.o.
* block.c (contained_in): Rewrite to use lexical nesting.
(block_linkage_function): Skip inlined function blocks.
(block_inlined_p): New.
* block.h (struct block): Update comment.
(block_inlined_p): New prototype.
* blockframe.c (get_frame_block): Handle inlined functions.
(get_frame_function): Do not use block_linkage_function.
(block_innermost_frame): Use get_frame_block and contained_in.
* breakpoint.c (watchpoint_check): Remove extra reinit_frame_cache.
Skip over inlined functions. Simplify epilogue check.
(bpstat_check_breakpoint_conditions): Use get_stack_frame_id.
Update comments.
(set_momentary_breakpoint): Only accept non-inlined frames.
(watch_command_1): Use frame_unwind_caller_pc and
frame_unwind_caller_id instead of get_prev_frame.
(until_break_command): Likewise. Use get_stack_frame_id.
* buildsym.c (end_symtab): Set SYMBOL_SYMTAB for block functions.
* dwarf2loc.c (dwarf_expr_frame_base): Use block_linkage_function.
* dwarf2read.c (process_die): Handle DW_TAG_inlined_subroutine.
(read_func_scope, new_symbol): Likewise. Handle arguments specially
for inlined functions without call site information.
(inherit_abstract_dies): Allow tag mismatch for inlined subroutines.
(die_specification): Treat DW_AT_abstract_origin as a specification.
(read_type_die): Handle DW_TAG_inlined_subroutine.
* frame-unwind.c (frame_unwind_init): Add inline_frame_unwind.
* frame.c (fprint_frame_id): Print inline depth.
(fprint_frame_type): Handle INLINE_FRAME and SENTINEL_FRAME.
(skip_inlined_frames, get_stack_frame_id): New.
(frame_unwind_caller_id): Use skip_inlined_frames.
(frame_id_inlined_p): New.
(frame_id_eq): Make the logic match the comments. Add inline_depth
check.
(frame_id_inner): Handle inlined functions.
(frame_unwind_pc): New function, copied from frame_unwind_caller_pc.
(frame_unwind_caller_pc): Use skip_inlined_frames and frame_unwind_pc.
(get_prev_frame_1): Check for inline frames. Split out frame
allocation to get_prev_frame_raw.
(get_prev_frame_raw): New function.
(get_prev_frame): Handle inline frames.
(get_frame_pc): Use frame_unwind_pc.
(get_frame_address_in_block): Skip inlined frames on both sides.
(pc_notcurrent): Delete.
(find_frame_sal): Rewrite to handle inline call sites. Use
get_frame_address_in_block.
(deprecated_update_frame_pc_hack): Make static.
* frame.h: Update comments.
(struct frame_id): Add inline_depth.
(enum frame_type): Add INLINE_FRAME.
(frame_id_inlined_p, get_stack_frame_id): New prototypes.
* gdbthread.h (struct thread_info): Add step_stack_frame_id field.
* infcmd.c (set_step_frame): New function.
(step_once): Use set_step_frame. Handle inlined functions.
(until_next_command): Use set_step_frame.
(finish_backward), finish_forward): Use get_stack_frame_id.
(finish_command): Support inlined functions.
* inferior.h (set_step_info): New prototype.
* infrun.c (RESUME_ALL): Use minus_one_ptid.
(clear_proceed_status): Clear step_stack_frame_id.
(init_wait_for_inferior): Call clear_inline_frame_state.
(init_execution_control_state): Make static.
(set_step_info): New function.
(init_thread_stepping_state): Do not set the symtab or line here.
(stepped_in_from): New function.
(handle_inferior_event): Handle inlined functions. Use set_step_info.
(insert_step_resume_breakpoint_at_frame): Use get_stack_frame_id.
(struct inferior_status): Add step_stack_frame_id.
(save_inferior_status, restore_inferior_status): Save and restore
step_stack_frame_id.
* inline-frame.c, inline-frame.h: New files.
* minsyms.c (prim_record_minimal_symbol_and_info): Use XCALLOC.
* regcache.c (regcache_write_pc): Call reinit_frame_cache.
* s390-tdep.c (s390_prologue_frame_unwind_cache): Handle INLINE_FRAME.
* stack.c (frame_show_address): New.
(print_frame_info, print_frame): Use it.
(find_frame_funname): Use get_frame_function. Handle inlined blocks.
(frame_info): Mark inlined functions.
(backtrace_command_1): Use get_current_user_frame.
(print_frame_local_vars, print_frame_label_vars): Update comments.
(return_command): Refuse inlined functions.
* symtab.c (lookup_symbol_aux_local): Stop at inlined function
boundaries.
(find_function_start_sal): Avoid inlined functions.
(completion_list_add_fields): New function.
(default_make_symbol_completion_list): Use it. Use block_static_block
and block_global_block. Check for inlined functions.
(skip_prologue_using_sal): Avoid line number comparison across
inlining.
* symtab.h (struct symbol): Add is_inlined.
(SYMBOL_INLINED): New.
* target.c (target_resume): Call clear_inline_frame_state.
* valops.c (value_of_variable): Check block_inlined_p.
gdb/doc/
* gdb.texinfo (Debugging Optimized Code): New chapter.
(Compiling for Debugging): Reference it. Move some
text to the new section.
gdb/testsuite/
* gdb.base/break.exp: Add an XFAIL for gcc/36748.
* gdb.cp/annota2.exp: Accept frames-invalid in more places.
* gdb.opt/Makefile.in (EXECUTABLES): Update.
* gdb.opt/clobbered-registers-O2.exp: Update to GPL v3.
* gdb.opt/inline-bt.c, gdb.opt/inline-bt.exp,
gdb.opt/inline-cmds.c, gdb.opt/inline-cmds.exp,
gdb.opt/inline-locals.c, gdb.opt/inline-locals.exp,
gdb.opt/inline-markers.c: New files.
* lib/gdb.exp (skip_inline_frame_tests): New function.
(skip_inline_var_tests): New function.
* dwarf2read.c (process_die): Handle import statements
(DW_TAG_imported_declaration, case DW_TAG_imported_module)
(read_import_statement): New.
(read_func_scope): Update using_directives to point to current context
(read_lexical_block_scope): Ditto.
* cp-support.h: Added prototype for cp_add_using.
* cp-namespace.c: Removed local context_stack.
(cp_initialize_namespace): Deleted.
(cp_finalize_namespace): Deleted.
(cp_add_using_directive): Use using_directives instead of using_list.
(cp_add_using): No longer static.
* buildsym.h: Created global using_direct variable.
Created using_direct variable in context_stack.
* buildsym.c (finish_block): Set using directives for the block under
construction.
(start_symtab): Removed call to cp_initialize_namespace().
(end_symtab): Removed call to cp_finalize_namespace().
(push_context): Save and reset using_directives.
* block.c (block_using): Return using directives for given
block instead of static block.
2009-06-23 Sami Wagiaalla <swagiaal@redhat.com>
* gdb.cp/namespace-using.exp: New test.
* gdb.cp/namespace-using.cc: New test.
* gdbtypes.h (create_string_type): Add character type argument.
* dwarf2read.c (read_tag_string_type): Pass character type to
create_string_type.
* value.h (value_string): Add character type argument.
* valops.c (value_string): Add character type argument. Pass it to
create_string_type. Do not allocate space in inferior.
* valarith.c (value_concat): Pass character type to value_string.
* value.h (value_typed_string): Rename to ...
(value_cstring): ... this.
* valops.c (value_typed_string): Rename to ...
(value_cstring): ... this.
* c-lang.c (evaluate_subexp_c): Update.
* python/python-value.c (builtin_type_pychar): New define.
(convert_value_from_python): Call value_cstring instead
of value_from_string.
* value.c (value_from_string): Remove.
* value.h (value_from_string): Remove.
* eval.c (evaluate_subexp_standard): Pass character type to
value_string. Pass expression architecture to value_nsstring
and lookup_child_selector.
* objc-lang.h (lookup_objc_class): Add GDBARCH parameter.
(lookup_child_selector): Likewise.
(value_nsstring): Likewise.
* objc-lang.c (lookup_objc_class): Add GDBARCH parameter.
Pass character type to value_string..
(lookup_child_selector): Likewise.
(value_nsstring): Add GDBARCH parameter, use it instead of
objfile architecture. Pass architecture to lookup_objc_class
and lookup_child_selector. Pass character type to value_string.
(end_msglist): Pass architecture to lookup_objc_class.
* objc-exp.y: Pass architecture to lookup_objc_class.
Make specifiable the make_function_type type memory ownership.
* gdbtypes.c (make_function_type): New parameter `objfile', use it
explicitely instead of TYPE-initialized removed local variable
`objfile'. Describe `objfile' it in the function comment.
(lookup_function_type): Update make_function_type callers.
* gdbtypes.h (make_function_type): Update the prototype.
* jv-lang.c (java_link_class_type): Update make_function_type callers.
* dwarf2read.c (read_subroutine_type): Likewise.
* stabsread.c (read_type): Likewise.
* dwarf2read.c
(new_symbol <DW_TAG_variable> <!DW_AT_location> <DW_AT_external>):
Create the symbol in local scope.
* symtab.h (cu->list_in_scope <LOC_UNRESOLVED>): New comment part.
gdb/testsuite/
* gdb.dwarf2/dw2-unresolved-main.c, gdb.dwarf2/dw2-unresolved.S,
gdb.dwarf2/dw2-unresolved.exp: New.
Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2read.c (process_die): Handle DW_TAG_typedef.
* eval.c (evaluate_subexp_standard) <OP_TYPE>: Strip a single
typedef.
* ada-lang.c (decode_packed_array_type): Call CHECK_TYPEDEF on the
SYMBOL_TYPE result.
* ada-typeprint.c (print_array_type): Do the NULL check
unconditionally.
* dwarf2read.c (dwarf_decode_macros): New variable `at_commandline'.
Move the variable `macinfo_type' out of the loop. Create a new
processing pass before the current one to pre-create `current_file'.
New complaint on misplaced zero/non-zero definitions/includes.
Skip first DW_MACINFO_start_file with `at_commandline' set.
inside the loop. Only call addrmap_set_empty if the compilation unit
had DW_AT_high_pc and DW_AT_low_pc. Update call to
scan_partial_symbols.
(scan_partial_symbols): Take NEED_PC argument and pass it along with
LOWPC and HIGHPC.
(add_partial_namespace): Take NEED_PC argument and pass it through.
(add_partial_subprogram): Take NEED_PC argument. Update the addrmap
if necessary.
* dwarf2read.c (dwarf2_debug_line_missing_end_sequence_complaint):
New function.
(dwarf_decode_lines): Detect null file numbers. Detect the end of
the line program sequence when no end sequence is emitted.
(dump_die_shallow): Renamed from dump_die, New args f, indent.
Print to specified file, indented by the specified amount.
(dump_die_for_error): New fn. Point all existing callers of
dump_die here.
(dump_die_die_1,dump_die): New fns, replaces ...
(dump_die_list): ... deleted.
(read_die_and_children_1): Old contents of read_die_and_children
moved here.
(read_die_and_children): Rewrite.
(read_die_and_siblings): Call read_die_and_children_1 instead of
read_die_and_children.
(_initialize_dwarf2_read): New option "debug dwarf2-die".
* gdbinit.in (pdie): New macro.
* doc/gdb.texinfo (set debug dwarf2-die): Document it.
(find_partial_die,follow_die_ref): Use it.
* gdb.dwarf2/dw2-cu-size.exp: New file.
* gdb.dwarf2/dw2-cu-size.S: New file.
* gdb.dwarf2/dw2-intercu.S (.Ltype_int_in_cu2): Renamed from
.Ltype_int for clarity.
first_die_offset. All uses updated.
Delete unused members cu_head_ptr, next.
Move members base_known, base_address to ...
(dwarf2_cu) ... here. All uses updated.
variable.
(process_full_comp_unit): Do not set processing_current_prefix.
(dwarf2_full_name): New function.
(read_func_scope): Do not set processing_current_prefix. Use
determine_prefix.
(read_structure_type): Do not set processing_current_prefix. Remove
unused inner cleanup.
(process_structure_scope): Do not set processing_current_prefix.
(read_enumeration_type): Use dwarf2_full_name.
(determine_class_name): Return a const char *. Put the result
on the objfile obstack. Use dwarf2_full_name.
(read_namespace_type): New function.
(read_namespace): Do not create the type here. Use
determine_prefix.
(read_typedef): Use dwarf2_full_name. Do not pass the name
to init_type.
(read_base_type): Do not pass the name to init_type. Handle
TYPE_FLAG_NOSIGN.
(read_unspecified_type): Do not pass the name to init_type.
(new_symbol): Use dwarf2_full_name instead of
processing_current_prefix.
(read_type_die): Do not set processing_current_prefix. Handle
DW_TAG_namespace.
(determine_prefix): Handle specifications. Return the result
on the objfile obstack. Handle unions correctly.
cp_scan_for_anonymous_namespaces here.
(finish_block): Do not call cp_set_block_scope here.
* cp-namespace.c (processing_has_namespace_info)
(processing_current_prefix): Delete.
(cp_initialize_namespace): Do not initialize
processing_has_namespace_info.
(cp_scan_for_anonymous_namespaces): Use SYMBOL_DEMANGLED_NAME. Do
not check processing_has_namespace_info.
(cp_set_block_scope): Take prefix and namespace info flag as
arguments. Honor namespaces regardless of a demangled name.
* cp-support.h (processing_has_namespace_info)
(processing_current_prefix): Delete declarations.
(cp_set_block_scope): Update prototype.
* dwarf2read.c (processing_has_namespace_info)
(processing_current_prefix): New static variables.
(read_file_scope): Initialize processing_has_namespace_info.
(read_func_scope): Call cp_set_block_scope for C++.
(new_symbol): Call cp_scan_for_anonymous_namespaces for C++.
* symtab.c (symbol_demangled_name): Accept a const argument.
* symtab.h (symbol_demangled_name): Update prototype.