summaryrefslogtreecommitdiffstats
path: root/contrib/gcc
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2012-12-28 19:02:28 +0000
committerpfg <pfg@FreeBSD.org>2012-12-28 19:02:28 +0000
commit618ba5b4be939ae336cc6a49e0535f46665346b7 (patch)
tree952cef6b84b9f1bdd5559af97bb1bfa347b164ae /contrib/gcc
parent5da31a993660c9f95f598228167307ae36fc3177 (diff)
downloadFreeBSD-src-618ba5b4be939ae336cc6a49e0535f46665346b7.zip
FreeBSD-src-618ba5b4be939ae336cc6a49e0535f46665346b7.tar.gz
gcc: avoid generating negative values to DW_AT_byte_size.
There is a bug in gcc (GCC/35998) where dwarf reports sizes of unsigned -1 (0xffffffff). On NetBSD this generated a faulty CTF entry which then caused a segfault in ctfmerge. The issue was worked around in NetBSD's Dtrace but since the issue originated in gcc, it seems reasonable to fix it here. Upstream gcc has been slow to react to this issue and the author that submitted the patch is not interested in licensing the change to us, so I did an independent workaround for the issue. MFC after: 1 week
Diffstat (limited to 'contrib/gcc')
-rw-r--r--contrib/gcc/dwarf2out.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/contrib/gcc/dwarf2out.c b/contrib/gcc/dwarf2out.c
index 25a906b..453e653 100644
--- a/contrib/gcc/dwarf2out.c
+++ b/contrib/gcc/dwarf2out.c
@@ -10812,9 +10812,9 @@ add_byte_size_attribute (dw_die_ref die, tree tree_node)
/* Note that `size' might be -1 when we get to this point. If it is, that
indicates that the byte size of the entity in question is variable. We
- have no good way of expressing this fact in Dwarf at the present time,
- so just let the -1 pass on through. */
- add_AT_unsigned (die, DW_AT_byte_size, size);
+ have no good way of expressing this fact in Dwarf at the present time.
+ GCC/35998: Avoid passing negative sizes to Dtrace and gdb. */
+ add_AT_unsigned (die, DW_AT_byte_size, (size > 0 ? size : 0));
}
/* For a FIELD_DECL node which represents a bit-field, output an attribute
OpenPOWER on IntegriCloud