re PR debug/86964 (Too many debug symbols included, especially for extern globals)
PR debug/86964 * dwarf2out.c (premark_used_variables): New function. (prune_unused_types_walk): Do not mark not premarked external variables. (prune_unused_types): Call premark_used_variables. * gcc.dg/debug/dwarf2/pr86964.c: New testcase. From-SVN: r269925
This commit is contained in:
parent
33163a622d
commit
715e3349b0
@ -1,3 +1,11 @@
|
||||
2019-03-25 Johan Karlsson <johan.karlsson@enea.com>
|
||||
|
||||
PR debug/86964
|
||||
* dwarf2out.c (premark_used_variables): New function.
|
||||
(prune_unused_types_walk): Do not mark not premarked external
|
||||
variables.
|
||||
(prune_unused_types): Call premark_used_variables.
|
||||
|
||||
2019-03-25 Vladimir Makarov <vmakarov@redhat.com>
|
||||
|
||||
PR rtl-optimization/89676
|
||||
|
@ -22732,6 +22732,21 @@ premark_types_used_by_global_vars (void)
|
||||
->traverse<void *, premark_types_used_by_global_vars_helper> (NULL);
|
||||
}
|
||||
|
||||
/* Mark all variables used by the symtab as perennial. */
|
||||
|
||||
static void
|
||||
premark_used_variables (void)
|
||||
{
|
||||
/* Mark DIEs in the symtab as used. */
|
||||
varpool_node *var;
|
||||
FOR_EACH_VARIABLE (var)
|
||||
{
|
||||
dw_die_ref die = lookup_decl_die (var->decl);
|
||||
if (die)
|
||||
die->die_perennial_p = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Generate a DW_TAG_call_site DIE in function DECL under SUBR_DIE
|
||||
for CA_LOC call arg loc node. */
|
||||
|
||||
@ -29394,6 +29409,19 @@ prune_unused_types_walk (dw_die_ref die)
|
||||
|
||||
return;
|
||||
|
||||
case DW_TAG_variable:
|
||||
if (flag_debug_only_used_symbols)
|
||||
{
|
||||
if (die->die_perennial_p)
|
||||
break;
|
||||
|
||||
/* premark_used_variables marks external variables --- don't mark
|
||||
them here. */
|
||||
if (get_AT (die, DW_AT_external))
|
||||
return;
|
||||
}
|
||||
/* FALLTHROUGH */
|
||||
|
||||
default:
|
||||
/* Mark everything else. */
|
||||
break;
|
||||
@ -29520,6 +29548,10 @@ prune_unused_types (void)
|
||||
/* Mark types that are used in global variables. */
|
||||
premark_types_used_by_global_vars ();
|
||||
|
||||
/* Mark variables used in the symtab. */
|
||||
if (flag_debug_only_used_symbols)
|
||||
premark_used_variables ();
|
||||
|
||||
/* Set the mark on nodes that are actually used. */
|
||||
prune_unused_types_walk (comp_unit_die ());
|
||||
for (node = limbo_die_list; node; node = node->next)
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-03-25 Johan Karlsson <johan.karlsson@enea.com>
|
||||
|
||||
PR debug/86964
|
||||
* gcc.dg/debug/dwarf2/pr86964.c: New testcase.
|
||||
|
||||
2019-03-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84661
|
||||
|
14
gcc/testsuite/gcc.dg/debug/dwarf2/pr86964.c
Normal file
14
gcc/testsuite/gcc.dg/debug/dwarf2/pr86964.c
Normal file
@ -0,0 +1,14 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -gdwarf -feliminate-unused-debug-symbols -dA" } */
|
||||
|
||||
struct S { int i; };
|
||||
extern struct S x;
|
||||
int y;
|
||||
int main()
|
||||
{
|
||||
return y;
|
||||
}
|
||||
|
||||
/* We should elide the DIEs for x and S but not y. */
|
||||
/* { dg-final { scan-assembler-times "DW_TAG_variable" 2 } } */
|
||||
/* { dg-final { scan-assembler-not "DW_TAG_structure_type" } } */
|
Loading…
Reference in New Issue
Block a user