aboutsummaryrefslogtreecommitdiff
path: root/gdb/gdbtypes.c
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2016-03-09 02:29:39 +0000
committerPedro Alves <palves@redhat.com>2016-03-09 02:47:40 +0000
commitb79497cb1cdc9b3053e5f0387bf3056c08c9bbdd (patch)
treea203c96dfab366888677ad75977a132ef2036567 /gdb/gdbtypes.c
parentaacca8a7a9c7f93955fa9dbf796b030ffce1b956 (diff)
downloadfsf-binutils-gdb-b79497cb1cdc9b3053e5f0387bf3056c08c9bbdd.zip
fsf-binutils-gdb-b79497cb1cdc9b3053e5f0387bf3056c08c9bbdd.tar.gz
fsf-binutils-gdb-b79497cb1cdc9b3053e5f0387bf3056c08c9bbdd.tar.bz2
Assert that a floating type's length is at least as long as its format
This would have caught the HP/PA bug fixed in the previous patch: .../src/gdb/gdbtypes.c:4690: internal-error: arch_float_type: Assertion `len >= floatformat_totalsize_bytes (floatformats[0])' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) Tested on x86-64 Fedora 23, --enable-targets=all. gdb/ChangeLog: 2016-03-09 Pedro Alves <palves@redhat.com> * doublest.c (floatformat_totalsize_bytes): New function. (floatformat_from_type): Assert that the type's length is at least as long as the floatformat's totalsize. * doublest.h (floatformat_totalsize_bytes): New declaration. * gdbtypes.c (arch_float_type): Assert that the type's length is at least as long as the floatformat's totalsize.
Diffstat (limited to 'gdb/gdbtypes.c')
-rw-r--r--gdb/gdbtypes.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index f129b0e..1af6fff 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -4682,6 +4682,15 @@ arch_float_type (struct gdbarch *gdbarch,
t = arch_type (gdbarch, TYPE_CODE_FLT, bit / TARGET_CHAR_BIT, name);
TYPE_FLOATFORMAT (t) = floatformats;
+
+ if (floatformats != NULL)
+ {
+ size_t len = TYPE_LENGTH (t);
+
+ gdb_assert (len >= floatformat_totalsize_bytes (floatformats[0]));
+ gdb_assert (len >= floatformat_totalsize_bytes (floatformats[1]));
+ }
+
return t;
}