diff options
author | Richard Biener <rguenther@suse.de> | 2019-02-27 11:59:07 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-02-27 11:59:07 +0000 |
commit | 06140066829cb1fc59222a457d2cdc89deb7d46b (patch) | |
tree | f01dc23b4f386d3af51f9f0ac87bf5204087671d /gcc | |
parent | a4395a846a9343960714568e7cf8af4425e63a50 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 9 |
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: |