aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-02-27 11:59:07 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-02-27 11:59:07 +0000
commit06140066829cb1fc59222a457d2cdc89deb7d46b (patch)
treef01dc23b4f386d3af51f9f0ac87bf5204087671d
parenta4395a846a9343960714568e7cf8af4425e63a50 (diff)
downloadgcc-06140066829cb1fc59222a457d2cdc89deb7d46b.zip
gcc-06140066829cb1fc59222a457d2cdc89deb7d46b.tar.gz
gcc-06140066829cb1fc59222a457d2cdc89deb7d46b.tar.bz2
re PR lto/89514 (-g -fdebug-types-section -flto gives 'Dwarf Error: bad length' in gdb)
2019-02-27 Richard Biener <rguenther@suse.de> PR debug/89514 * dwarf2out.c (size_of_die): Key on AT_ref (a)->comdat_type_p rather than on use_debug_types, doing what output_die does. (value_format): Likewise. From-SVN: r269250
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/dwarf2out.c9
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6117300..831290f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-02-27 Richard Biener <rguenther@suse.de>
+
+ PR debug/89514
+ * dwarf2out.c (size_of_die): Key on AT_ref (a)->comdat_type_p
+ rather than on use_debug_types, doing what output_die does.
+ (value_format): Likewise.
+
2019-02-27 Martin Jambor <mjambor@suse.cz>
Martin Sebor <msebor@redhat.com>
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index d78e75c..5eb5d3a 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -9433,7 +9433,7 @@ size_of_die (dw_die_ref die)
we use DW_FORM_ref_addr. In DWARF2, DW_FORM_ref_addr
is sized by target address length, whereas in DWARF3
it's always sized as an offset. */
- if (use_debug_types)
+ if (AT_ref (a)->comdat_type_p)
size += DWARF_TYPE_SIGNATURE_SIZE;
else if (dwarf_version == 2)
size += DWARF2_ADDR_SIZE;
@@ -9877,7 +9877,12 @@ value_format (dw_attr_node *a)
return DW_FORM_flag;
case dw_val_class_die_ref:
if (AT_ref_external (a))
- return use_debug_types ? DW_FORM_ref_sig8 : DW_FORM_ref_addr;
+ {
+ if (AT_ref (a)->comdat_type_p)
+ return DW_FORM_ref_sig8;
+ else
+ return DW_FORM_ref_addr;
+ }
else
return DW_FORM_ref;
case dw_val_class_fde_ref: