aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@adacore.com>2020-11-15 03:14:24 -0500
committerJoel Brobecker <brobecker@adacore.com>2020-11-15 03:14:24 -0500
commitb26daff97cd885640e23229a3d164cd9d93c49ef (patch)
treed32c394299fd968d93abeb4c49615dbb041443c0 /gdb
parent0958441403b92163dff851f0a78241c7fcb4e8eb (diff)
downloadbinutils-b26daff97cd885640e23229a3d164cd9d93c49ef.zip
binutils-b26daff97cd885640e23229a3d164cd9d93c49ef.tar.gz
binutils-b26daff97cd885640e23229a3d164cd9d93c49ef.tar.bz2
fix printing of DWARF fixed-point type objects with format modifier
Consider a fixed-point type such the scaling factor is 1/16, as the following Ada code snippet would create: type FP1_Type is delta 0.1 range -1.0 .. +1.0; FP1_Var : FP1_Type := 0.25; Printing the value of this variable with a format modifier yields the wrong value. E.g.: (gdb) p /x fp1_var $6 = 0x4 Since the real value is 0.25, we therefore expected... (gdb) p /x fp1_var $6 = 0x0 What happens, in this case, is that the value being printed is actually the "raw" value of our object, before the scaling factor gets applied. This commit fixes the issue by using approach as for float values, where we convert the value into an integer value, prior to printing, knowing that the conversion takes the scaling factor into account. gdb/ChangeLog: * printcmd.c (print_scalar_formatted): Add fixed-point type handling when options->format is set. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-fixed-point.exp: Add "print /x" tests.
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/printcmd.c3
-rw-r--r--gdb/testsuite/ChangeLog4
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp12
4 files changed, 23 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 16905ac..0d322da 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,10 @@
2020-11-15 Joel Brobecker <brobecker@adacore.com>
+ * printcmd.c (print_scalar_formatted): Add fixed-point type
+ handling when options->format is set.
+
+2020-11-15 Joel Brobecker <brobecker@adacore.com>
+
* ada-valprint.c (ada_value_print_1): Add fixed-point type handling.
* dwarf2/read.c (get_dwarf2_rational_constant)
(get_dwarf2_unsigned_rational_constant, finish_fixed_point_type)
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index f7186c2..6651424 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -421,7 +421,8 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
range case, we want to avoid this, so we store the unpacked value
here for possible use later. */
gdb::optional<LONGEST> val_long;
- if ((type->code () == TYPE_CODE_FLT
+ if (((type->code () == TYPE_CODE_FLT
+ || is_fixed_point_type (type))
&& (options->format == 'o'
|| options->format == 'x'
|| options->format == 't'
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 0f629bd..9b9ffe5 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2020-11-15 Joel Brobecker <brobecker@adacore.com>
+ * gdb.dwarf2/dw2-fixed-point.exp: Add "print /x" tests.
+
+2020-11-15 Joel Brobecker <brobecker@adacore.com>
+
* gdb.ada/fixed_cmp.exp: Force compilation to use -fgnat-encodings=all.
* gdb.ada/fixed_points.exp: Add fixed-point variables printing tests.
* gdb.ada/fixed_points/pck.ads, gdb.ada/fixed_points/pck.adb:
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp b/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp
index bf88ffe..27c549c 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-fixed-point.exp
@@ -122,11 +122,23 @@ gdb_test_no_output "set lang ada"
gdb_test "print pck.fp1_var" \
" = 0.25"
+gdb_test "print /x pck.fp1_var" \
+ " = 0x0"
+
gdb_test "print pck.fp2_var" \
" = -0.01"
+gdb_test "print /x pck.fp2_var" \
+ " = 0x0"
+
gdb_test "print pck.fp3_var" \
" = 0.1"
+gdb_test "print /x pck.fp3_var" \
+ " = 0x0"
+
gdb_test "print pck.fp1_range_var" \
" = 1"
+
+gdb_test "print /x pck.fp1_range_var" \
+ " = 0x1"