diff options
author | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-12-13 17:31:30 +0000 |
---|---|---|
committer | mrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-12-13 17:31:30 +0000 |
commit | 3dd775fb895cffb77ac74098a74e9fca28edaf79 (patch) | |
tree | f68062e9cfe09046337dc976767a5f7938462868 /gcc/dwarf2out.c | |
parent | 84014c53e113ab540befd1eceb8598d28a323ab3 (diff) | |
parent | 34a5d2a56d4b0a0ea74339c985c919aabfc530a4 (diff) | |
download | gcc-3dd775fb895cffb77ac74098a74e9fca28edaf79.tar.gz |
Merge in trunk.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/wide-int@205966 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 65 |
1 files changed, 58 insertions, 7 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index e9588edd447..d968afb0bc0 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -2354,10 +2354,10 @@ output_loc_sequence_raw (dw_loc_descr_ref loc) dw_cfa_location, adding the given OFFSET to the result of the expression. */ -struct dw_loc_descr_struct * +struct dw_loc_descr_node * build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset) { - struct dw_loc_descr_struct *head, *tmp; + struct dw_loc_descr_node *head, *tmp; offset += cfa->offset; @@ -2384,11 +2384,11 @@ build_cfa_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset) the address at OFFSET from the CFA when stack is aligned to ALIGNMENT byte. */ -struct dw_loc_descr_struct * +struct dw_loc_descr_node * build_cfa_aligned_loc (dw_cfa_location *cfa, HOST_WIDE_INT offset, HOST_WIDE_INT alignment) { - struct dw_loc_descr_struct *head; + struct dw_loc_descr_node *head; unsigned int dwarf_fp = DWARF_FRAME_REGNUM (HARD_FRAME_POINTER_REGNUM); @@ -3231,6 +3231,7 @@ static inline int is_redundant_typedef (const_tree); static bool is_naming_typedef_decl (const_tree); static inline dw_die_ref get_context_die (tree); static void gen_namespace_die (tree, dw_die_ref); +static dw_die_ref gen_namelist_decl (tree, dw_die_ref, tree); static dw_die_ref gen_decl_die (tree, tree, dw_die_ref); static dw_die_ref force_decl_die (tree); static dw_die_ref force_type_die (tree); @@ -15321,7 +15322,7 @@ reference_to_unused (tree * tp, int * walk_subtrees, return *tp; else if (TREE_CODE (*tp) == VAR_DECL) { - struct varpool_node *node = varpool_get_node (*tp); + varpool_node *node = varpool_get_node (*tp); if (!node || !node->definition) return *tp; } @@ -17998,7 +17999,7 @@ premark_types_used_by_global_vars_helper (void **slot, { /* Ask cgraph if the global variable really is to be emitted. If yes, then we'll keep the DIE of ENTRY->TYPE. */ - struct varpool_node *node = varpool_get_node (entry->var_decl); + varpool_node *node = varpool_get_node (entry->var_decl); if (node && node->definition) { die->die_perennial_p = 1; @@ -20600,6 +20601,11 @@ gen_decl_die (tree decl, tree origin, dw_die_ref context_die) gen_namespace_die (decl, context_die); break; + case NAMELIST_DECL: + gen_namelist_decl (DECL_NAME (decl), context_die, + NAMELIST_DECL_ASSOCIATED_DECL (decl)); + break; + default: /* Probably some frontend-internal decl. Assume we don't care. */ gcc_assert ((int)TREE_CODE (decl) > NUM_TREE_CODES); @@ -20689,7 +20695,12 @@ dwarf2out_imported_module_or_decl_1 (tree decl, gen_type_die_for_member (type, decl, get_context_die (TYPE_CONTEXT (type))); } - at_import_die = force_decl_die (decl); + if (TREE_CODE (decl) == NAMELIST_DECL) + at_import_die = gen_namelist_decl (DECL_NAME (decl), + get_context_die (DECL_CONTEXT (decl)), + NULL_TREE); + else + at_import_die = force_decl_die (decl); } } @@ -20761,6 +20772,43 @@ dwarf2out_imported_module_or_decl (tree decl, tree name, tree context, } +/* Output debug information for namelists. */ + +static dw_die_ref +gen_namelist_decl (tree name, dw_die_ref scope_die, tree item_decls) +{ + dw_die_ref nml_die, nml_item_die, nml_item_ref_die; + tree value; + unsigned i; + + if (debug_info_level <= DINFO_LEVEL_TERSE) + return NULL; + + gcc_assert (scope_die != NULL); + nml_die = new_die (DW_TAG_namelist, scope_die, NULL); + add_AT_string (nml_die, DW_AT_name, IDENTIFIER_POINTER (name)); + + /* If there are no item_decls, we have a nondefining namelist, e.g. + with USE association; hence, set DW_AT_declaration. */ + if (item_decls == NULL_TREE) + { + add_AT_flag (nml_die, DW_AT_declaration, 1); + return nml_die; + } + + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (item_decls), i, value) + { + nml_item_ref_die = lookup_decl_die (value); + if (!nml_item_ref_die) + nml_item_ref_die = force_decl_die (value); + + nml_item_die = new_die (DW_TAG_namelist_item, nml_die, NULL); + add_AT_die_ref (nml_item_die, DW_AT_namelist_items, nml_item_ref_die); + } + return nml_die; +} + + /* Write the debugging output for DECL. */ void @@ -20881,6 +20929,9 @@ dwarf2out_decl (tree decl) break; + case NAMELIST_DECL: + break; + default: return; } |