summaryrefslogtreecommitdiff
path: root/gcc/dwarf2out.c
diff options
context:
space:
mode:
authormrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>2013-12-13 17:31:30 +0000
committermrs <mrs@138bc75d-0d04-0410-961f-82ee72b054a4>2013-12-13 17:31:30 +0000
commit3dd775fb895cffb77ac74098a74e9fca28edaf79 (patch)
treef68062e9cfe09046337dc976767a5f7938462868 /gcc/dwarf2out.c
parent84014c53e113ab540befd1eceb8598d28a323ab3 (diff)
parent34a5d2a56d4b0a0ea74339c985c919aabfc530a4 (diff)
downloadgcc-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.c65
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;
}