Message ID | alpine.LSU.2.20.1705151439060.20726@zhemvz.fhfr.qr |
---|---|
State | New |
Headers | show |
On Mon, May 15, 2017 at 02:43:43PM +0200, Richard Biener wrote: > > While bringing early LTO debug up-to-speed I noticed the following two > issues. The first patch avoids useless work in > note_variable_value_in_expr and actually makes use of the DIE we > eventually create in resolve_variable_value_in_expr. > > The second avoids generating a DW_OP_GNU_variable_value for a decl > we'll never have a DIE for -- this might be less obvious than the > other patch but I think we'll also never have any other debug info > we can resolve the decl with(?) > > Bootstrapped and tested the first patch sofar > on x86_64-unknown-linux-gnu, 2nd is pending. > > Ok? > > Thanks, > Richard. > > 2017-05-15 Richard Biener <rguenther@suse.de> > > * dwarf2out.c (resolve_variable_value_in_expr): Lookup DIE > just generated. > (note_variable_value_in_expr): If we resolved the decl ref > do not push to the stack. LGTM. > 2017-05-15 Richard Biener <rguenther@suse.de> > > * dwarf2out.c (loc_list_from_tree_1): Do not create > DW_OP_GNU_variable_value for DECL_IGNORED_P decls. Can you verify it e.g. in a bootstrapped cc1plus doesn't change the debug info (except for dwarf2out.o itself)? It looks reasonable and it would surprise me if did, just want to be sure. Jakub
On Mon, May 15, 2017 at 3:19 PM, Jakub Jelinek <jakub@redhat.com> wrote: > On Mon, May 15, 2017 at 02:43:43PM +0200, Richard Biener wrote: >> >> While bringing early LTO debug up-to-speed I noticed the following two >> issues. The first patch avoids useless work in >> note_variable_value_in_expr and actually makes use of the DIE we >> eventually create in resolve_variable_value_in_expr. >> >> The second avoids generating a DW_OP_GNU_variable_value for a decl >> we'll never have a DIE for -- this might be less obvious than the >> other patch but I think we'll also never have any other debug info >> we can resolve the decl with(?) >> >> Bootstrapped and tested the first patch sofar >> on x86_64-unknown-linux-gnu, 2nd is pending. >> >> Ok? >> >> Thanks, >> Richard. >> >> 2017-05-15 Richard Biener <rguenther@suse.de> >> >> * dwarf2out.c (resolve_variable_value_in_expr): Lookup DIE >> just generated. >> (note_variable_value_in_expr): If we resolved the decl ref >> do not push to the stack. > > LGTM. > >> 2017-05-15 Richard Biener <rguenther@suse.de> >> >> * dwarf2out.c (loc_list_from_tree_1): Do not create >> DW_OP_GNU_variable_value for DECL_IGNORED_P decls. > > Can you verify it e.g. in a bootstrapped cc1plus doesn't change the debug info > (except for dwarf2out.o itself)? > It looks reasonable and it would surprise me if did, just want to be sure. Done. Note it only happened for Ada. Richard. > Jakub
Index: gcc/dwarf2out.c =================================================================== --- gcc/dwarf2out.c (revision 248055) +++ gcc/dwarf2out.c (working copy) @@ -30109,8 +30109,9 @@ resolve_variable_value_in_expr (dw_attr_ break; } /* Create DW_TAG_variable that we can refer to. */ - ref = gen_decl_die (decl, NULL_TREE, NULL, - lookup_decl_die (current_function_decl)); + gen_decl_die (decl, NULL_TREE, NULL, + lookup_decl_die (current_function_decl)); + ref = lookup_decl_die (decl); if (ref) { loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref; @@ -30203,6 +30204,7 @@ note_variable_value_in_expr (dw_die_ref loc->dw_loc_oprnd1.val_class = dw_val_class_die_ref; loc->dw_loc_oprnd1.v.val_die_ref.die = ref; loc->dw_loc_oprnd1.v.val_die_ref.external = 0; + continue; } if (VAR_P (decl) && DECL_CONTEXT (decl) 2017-05-15 Richard Biener <rguenther@suse.de> * dwarf2out.c (loc_list_from_tree_1): Do not create DW_OP_GNU_variable_value for DECL_IGNORED_P decls. Index: gcc/dwarf2out.c =================================================================== --- gcc/dwarf2out.c (revision 248054) +++ gcc/dwarf2out.c (working copy) @@ -17373,6 +17685,7 @@ loc_list_from_tree_1 (tree loc, int want && early_dwarf && current_function_decl && want_address != 1 + && ! DECL_IGNORED_P (loc) && (INTEGRAL_TYPE_P (TREE_TYPE (loc)) || POINTER_TYPE_P (TREE_TYPE (loc))) && DECL_CONTEXT (loc) == current_function_decl