From patchwork Thu Jul 13 12:33:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 21588 Received: (qmail 70127 invoked by alias); 13 Jul 2017 12:35:45 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 70089 invoked by uid 89); 13 Jul 2017 12:35:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: gproxy5.mail.unifiedlayer.com Received: from gproxy5-pub.mail.unifiedlayer.com (HELO gproxy5.mail.unifiedlayer.com) (67.222.38.55) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 13 Jul 2017 12:35:40 +0000 Received: from CMOut01 (unknown [10.0.90.82]) by gproxy5.mail.unifiedlayer.com (Postfix) with ESMTP id 510F2140ECF for ; Thu, 13 Jul 2017 06:34:08 -0600 (MDT) Received: from box522.bluehost.com ([74.220.219.122]) by CMOut01 with id kCa41v0142f2jeq01Ca7wU; Thu, 13 Jul 2017 06:34:08 -0600 X-Authority-Analysis: v=2.2 cv=FvB1xyjq c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=G3gG6ho9WtcA:10 a=zstS-IiYAAAA:8 a=6I5d2MoRAAAA:8 a=8jCL0hXuAAAA:8 a=JScsgFS8dqvp8p0fIBsA:9 a=iQlPv8b0fFsHC5DS:21 a=L4CY9uDQH4mScru8:21 a=4G6NA9xxw8l3yy4pmD5M:22 a=IjZwj45LgO3ly-622nXo:22 a=b_lFyywqPYlUfrNfzq6h:22 Received: from 174-29-39-24.hlrn.qwest.net ([174.29.39.24]:47644 helo=pokyo.Home) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.87) (envelope-from ) id 1dVdJk-001NlA-Kc; Thu, 13 Jul 2017 06:34:04 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA 1/2] Fix two regressions in scalar printing Date: Thu, 13 Jul 2017 06:33:59 -0600 Message-Id: <20170713123400.28917-2-tom@tromey.com> In-Reply-To: <20170713123400.28917-1-tom@tromey.com> References: <20170713123400.28917-1-tom@tromey.com> X-BWhitelist: no X-Exim-ID: 1dVdJk-001NlA-Kc X-Source-Sender: 174-29-39-24.hlrn.qwest.net (pokyo.Home) [174.29.39.24]:47644 X-Source-Auth: tom+tromey.com X-Email-Count: 2 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== 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 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 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 + + 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 * 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 + + PR gdb/21675: + * gdb.base/printcmds.exp (test_radices): New function. + 2017-07-11 Iain Buclaw * 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. */