diff options
author | Sterling Augustine <saugustine@google.com> | 2013-07-25 22:18:21 +0000 |
---|---|---|
committer | Sterling Augustine <sterling@gcc.gnu.org> | 2013-07-25 22:18:21 +0000 |
commit | b60512074dda38da43f3781ab039e0d59c23c6db (patch) | |
tree | 01bed8116c99d5c56c779b5e96442f91115c944c /gcc | |
parent | f0051264182ba3d09445f169bfb10b660127f4da (diff) | |
download | gcc-b60512074dda38da43f3781ab039e0d59c23c6db.zip gcc-b60512074dda38da43f3781ab039e0d59c23c6db.tar.gz gcc-b60512074dda38da43f3781ab039e0d59c23c6db.tar.bz2 |
dwarf2out.c (size_of_pubnames): Move code to...
2013-07-25 Sterling Augustine <saugustine@google.com>
* dwarf2out.c (size_of_pubnames): Move code to...
(include_pubname_in_output): ...here. New.
(want_pubnames): Rearrange.
(output_pubnames): Call include_pubname_in_output. Move assertion.
From-SVN: r201255
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 56 |
2 files changed, 42 insertions, 21 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a47ad4d..7bcc02d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-07-25 Sterling Augustine <saugustine@google.com> + + * dwarf2out.c (size_of_pubnames): Move code to... + (include_pubname_in_output): ...here. New. + (want_pubnames): Rearrange. + (output_pubnames): Call include_pubname_in_output. Move assertion. + 2013-07-25 Cameron McInally <cameron.mcinally@nyu.edu> * doc/extend.texi: Fix return types for __builtin_ia32_cmp*s builtins. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 87f9644..24022aa 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -7887,6 +7887,32 @@ unmark_all_dies (dw_die_ref die) unmark_all_dies (AT_ref (a)); } +/* Calculate if the entry should appear in the final output file. It may be + from a pruned a type. */ + +static bool +include_pubname_in_output (vec<pubname_entry, va_gc> *table, pubname_entry *p) +{ + if (table == pubname_table) + { + /* Enumerator names are part of the pubname table, but the + parent DW_TAG_enumeration_type die may have been pruned. + Don't output them if that is the case. */ + if (p->die->die_tag == DW_TAG_enumerator && + (p->die->die_parent == NULL + || !p->die->die_parent->die_perennial_p)) + return false; + + /* Everything else in the pubname table is included. */ + return true; + } + + /* The pubtypes table shouldn't include types that have been + pruned. */ + return (p->die->die_offset != 0 + || !flag_eliminate_unused_debug_types); +} + /* Return the size of the .debug_pubnames or .debug_pubtypes table generated for the compilation unit. */ @@ -7899,9 +7925,7 @@ size_of_pubnames (vec<pubname_entry, va_gc> *names) size = DWARF_PUBNAMES_HEADER_SIZE; FOR_EACH_VEC_ELT (*names, i, p) - if (names != pubtype_table - || p->die->die_offset != 0 - || !flag_eliminate_unused_debug_types) + if (include_pubname_in_output (names, p)) size += strlen (p->name) + DWARF_OFFSET_SIZE + 1; size += DWARF_OFFSET_SIZE; @@ -8731,9 +8755,9 @@ output_comp_unit (dw_die_ref die, int output_if_empty) static inline bool want_pubnames (void) { - return (debug_generate_pub_sections != -1 - ? debug_generate_pub_sections - : targetm.want_debug_pub_sections); + if (debug_generate_pub_sections != -1) + return debug_generate_pub_sections; + return targetm.want_debug_pub_sections; } /* Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes. */ @@ -9095,24 +9119,14 @@ output_pubnames (vec<pubname_entry, va_gc> *names) FOR_EACH_VEC_ELT (*names, i, pub) { - /* Enumerator names are part of the pubname table, but the parent - DW_TAG_enumeration_type die may have been pruned. Don't output - them if that is the case. */ - if (pub->die->die_tag == DW_TAG_enumerator && - (pub->die->die_parent == NULL - || !pub->die->die_parent->die_perennial_p)) - continue; - - /* We shouldn't see pubnames for DIEs outside of the main CU. */ - if (names == pubname_table && pub->die->die_tag != DW_TAG_enumerator) - gcc_assert (pub->die->die_mark); - - if (names != pubtype_table - || pub->die->die_offset != 0 - || !flag_eliminate_unused_debug_types) + if (include_pubname_in_output (names, pub)) { dw_offset die_offset = pub->die->die_offset; + /* We shouldn't see pubnames for DIEs outside of the main CU. */ + if (names == pubname_table && pub->die->die_tag != DW_TAG_enumerator) + gcc_assert (pub->die->die_mark); + /* If we're putting types in their own .debug_types sections, the .debug_pubtypes table will still point to the compile unit (not the type unit), so we want to use the offset of |