aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSterling Augustine <saugustine@google.com>2013-07-25 22:18:21 +0000
committerSterling Augustine <sterling@gcc.gnu.org>2013-07-25 22:18:21 +0000
commitb60512074dda38da43f3781ab039e0d59c23c6db (patch)
tree01bed8116c99d5c56c779b5e96442f91115c944c /gcc
parentf0051264182ba3d09445f169bfb10b660127f4da (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/dwarf2out.c56
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