From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tom@tromey.com>
Subject: [RFA 1/2] Fix two regressions in scalar printing
Date: Thu, 13 Jul 2017 12:35:00 -0000 [thread overview]
Message-ID: <20170713123400.28917-2-tom@tromey.com> (raw)
In-Reply-To: <20170713123400.28917-1-tom@tromey.com>
PR gdb/21675 points out a few regressions in scalar printing.
One type of regression is due to not carrying over the old handling of
floating point printing -- where a format like "/x" causes a floating
point number to first be cast to integer. While this behavior does not
seem very useful to me, apparently at least one person is testing for
it, and we did agree in the earlier thread to preserve this. So, this
patch extends this behavior to the 'd' and 'u' formats.
The other regression is a longstanding bug in print_octal_chars: one of
the constants was wrong. This patch fixes the constant and adds static
asserts to help catch this sort of error.
2017-07-13 Tom Tromey <tom@tromey.com>
PR gdb/21675
* valprint.c (LOW_ZERO): Change value to 034.
(print_octal_chars): Add static_asserts for octal constants.
* printcmd.c (print_scalar_formatted): Add 'd' and 'u' to special
cases for float types.
2017-07-13 Tom Tromey <tom@tromey.com>
PR gdb/21675:
* gdb.base/printcmds.exp (test_radices): New function.
---
gdb/ChangeLog | 8 ++++++++
gdb/printcmd.c | 11 ++++++++---
gdb/testsuite/ChangeLog | 5 +++++
gdb/testsuite/gdb.base/printcmds.exp | 8 ++++++++
gdb/valprint.c | 8 +++++++-
5 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 012b3e4..5ac5bab 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2017-07-13 Tom Tromey <tom@tromey.com>
+
+ PR gdb/21675
+ * valprint.c (LOW_ZERO): Change value to 034.
+ (print_octal_chars): Add static_asserts for octal constants.
+ * printcmd.c (print_scalar_formatted): Add 'd' and 'u' to special
+ cases for float types.
+
2017-07-11 John Baldwin <jhb@FreeBSD.org>
* amd64-bsd-nat.c (amd64bsd_fetch_inferior_registers): Use
diff --git a/gdb/printcmd.c b/gdb/printcmd.c
index a8cc052..cd615ec 100644
--- a/gdb/printcmd.c
+++ b/gdb/printcmd.c
@@ -413,7 +413,9 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
&& (options->format == 'o'
|| options->format == 'x'
|| options->format == 't'
- || options->format == 'z'))
+ || options->format == 'z'
+ || options->format == 'd'
+ || options->format == 'u'))
{
LONGEST val_long = unpack_long (type, valaddr);
converted_float_bytes.resize (TYPE_LENGTH (type));
@@ -427,11 +429,14 @@ print_scalar_formatted (const gdb_byte *valaddr, struct type *type,
case 'o':
print_octal_chars (stream, valaddr, len, byte_order);
break;
+ case 'd':
case 'u':
- print_decimal_chars (stream, valaddr, len, false, byte_order);
+ {
+ bool is_signed = options->format != 'u' || !TYPE_UNSIGNED (type);
+ print_decimal_chars (stream, valaddr, len, is_signed, byte_order);
+ }
break;
case 0:
- case 'd':
if (TYPE_CODE (type) != TYPE_CODE_FLT)
{
print_decimal_chars (stream, valaddr, len, !TYPE_UNSIGNED (type),
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index aa3dee3..0c8481b 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-07-13 Tom Tromey <tom@tromey.com>
+
+ PR gdb/21675:
+ * gdb.base/printcmds.exp (test_radices): New function.
+
2017-07-11 Iain Buclaw <ibuclaw@gdcproject.org>
* gdb.dlang/demangle.exp: Update for demangling changes.
diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp
index 323ca73..03275c3 100644
--- a/gdb/testsuite/gdb.base/printcmds.exp
+++ b/gdb/testsuite/gdb.base/printcmds.exp
@@ -155,6 +155,13 @@ proc test_float_rejected {} {
test_print_reject "p 1.1ll"
}
+# Regression test for PR gdb/21675
+proc test_radices {} {
+ gdb_test "print/o 16777211" " = 077777773"
+ gdb_test "print/d 1.5" " = 1\[^.\]"
+ gdb_test "print/u 1.5" " = 1\[^.\]"
+}
+
proc test_print_all_chars {} {
global gdb_prompt
@@ -981,3 +988,4 @@ test_printf
test_printf_with_dfp
test_print_symbol
test_repeat_bytes
+test_radices
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 1667882..9e216cf 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -1593,15 +1593,21 @@ print_octal_chars (struct ui_file *stream, const gdb_byte *valaddr,
*/
#define BITS_IN_OCTAL 3
#define HIGH_ZERO 0340
-#define LOW_ZERO 0016
+#define LOW_ZERO 0034
#define CARRY_ZERO 0003
+ static_assert (HIGH_ZERO + LOW_ZERO + CARRY_ZERO == 0xff,
+ "cycle zero constants are wrong");
#define HIGH_ONE 0200
#define MID_ONE 0160
#define LOW_ONE 0016
#define CARRY_ONE 0001
+ static_assert (HIGH_ONE + MID_ONE + LOW_ONE + CARRY_ONE == 0xff,
+ "cycle one constants are wrong");
#define HIGH_TWO 0300
#define MID_TWO 0070
#define LOW_TWO 0007
+ static_assert (HIGH_TWO + MID_TWO + LOW_TWO == 0xff,
+ "cycle two constants are wrong");
/* For 32 we start in cycle 2, with two bits and one bit carry;
for 64 in cycle in cycle 1, with one bit and a two bit carry. */
--
2.9.4
next prev parent reply other threads:[~2017-07-13 12:35 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20170713123400.28917-1-tom@tromey.com>
2017-07-13 12:34 ` [RFA 2/2] Remove BITS_IN_BYTES define Tom Tromey
2017-07-14 15:16 ` Pedro Alves
2017-07-14 16:15 ` Tom Tromey
2017-07-13 12:35 ` Tom Tromey [this message]
2017-07-14 14:56 ` [RFA 1/2] Fix two regressions in scalar printing Pedro Alves
2017-07-14 15:20 ` Eli Zaretskii
2017-07-14 16:50 ` Tom Tromey
2017-07-14 17:25 ` Pedro Alves
2017-07-31 22:03 ` Tom Tromey
2017-08-14 14:02 ` Pedro Alves
2017-08-14 15:22 ` Tom Tromey
2017-08-14 15:43 ` Tom Tromey
2017-08-14 15:52 ` Pedro Alves
2017-08-17 2:24 ` Tom Tromey
2017-12-10 14:15 ` Regression on 32-bit: gdb.guile/scm-ports.exp [Re: [RFA 1/2] Fix two regressions in scalar printing] Jan Kratochvil
2017-07-14 15:19 ` [RFA 1/2] Fix two regressions in scalar printing Jonah Graham
2017-08-25 16:54 ` Thomas Preudhomme
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170713123400.28917-2-tom@tromey.com \
--to=tom@tromey.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox