diff options
author | Tom Tromey <tromey@adacore.com> | 2020-12-14 07:35:45 -0700 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2020-12-14 07:35:45 -0700 |
commit | a3bdae4ef826f2b59cc475e530b2a4130185cfac (patch) | |
tree | 18d4c1cd273e34ce9e7766d9a824d58ab14daec3 | |
parent | bf6d80378274fa33001f2ca1cef084eabc904178 (diff) | |
download | gdb-a3bdae4ef826f2b59cc475e530b2a4130185cfac.zip gdb-a3bdae4ef826f2b59cc475e530b2a4130185cfac.tar.gz gdb-a3bdae4ef826f2b59cc475e530b2a4130185cfac.tar.bz2 |
Handle fixed-point division by zero
fixed_point_binop did not account for division by zero. This would
lead to gdb getting SIGFPE and subsequently cause some test cases to
hang.
gdb/ChangeLog
2020-12-14 Tom Tromey <tromey@adacore.com>
* valarith.c (fixed_point_binop): Call error on division by zero.
gdb/testsuite/ChangeLog
2020-12-14 Tom Tromey <tromey@adacore.com>
* gdb.dwarf2/dw2-fixed-point.exp: Add test for division by zero.
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp | 3 | ||||
-rw-r--r-- | gdb/valarith.c | 2 |
4 files changed, 13 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e6c572d..4ac0acc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2020-12-14 Tom Tromey <tromey@adacore.com> + + * valarith.c (fixed_point_binop): Call error on division by zero. + 2020-12-13 Tom Tromey <tom@tromey.com> * gdbtypes.c (safe_parse_type): Make argument const. diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index c33f0b2..dba9292 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2020-12-14 Tom Tromey <tromey@adacore.com> + + * gdb.dwarf2/dw2-fixed-point.exp: Add test for division by zero. + 2020-12-13 Tom de Vries <tdevries@suse.de> PR testsuite/26953 diff --git a/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp b/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp index 67d1d34..2c859d1 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp +++ b/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp @@ -164,6 +164,9 @@ gdb_test "print pck.fp3_var * 1" \ gdb_test "print pck.fp3_var / pck.fp3_var" \ " = 1" +gdb_test "print pck.fp3_var / 0" \ + "Division by zero" + gdb_test "print pck.fp1_range_var - 0.5" \ " = 0.5" diff --git a/gdb/valarith.c b/gdb/valarith.c index 37988f1..6854d9b 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -965,6 +965,8 @@ fixed_point_binop (struct value *arg1, struct value *arg2, enum exp_opcode op) break; case BINOP_DIV: + if (mpq_sgn (v2.val) == 0) + error (_("Division by zero")); mpq_div (res.val, v1.val, v2.val); val = fixed_point_to_value (res); break; |