From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id E1FA33856DC8 for ; Tue, 9 Aug 2022 16:38:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E1FA33856DC8 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-646-DrS3svPxMJewABGXpIJCuA-1; Tue, 09 Aug 2022 12:38:49 -0400 X-MC-Unique: DrS3svPxMJewABGXpIJCuA-1 Received: by mail-wm1-f70.google.com with SMTP id c189-20020a1c35c6000000b003a4bfb16d86so6242984wma.3 for ; Tue, 09 Aug 2022 09:38:49 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc; bh=UHEmHnLr1uPFg2hrY8oboVITSB0LWQTBECthZxzw0Og=; b=xbvXNXck7/VGW6DvaoWnY8da2HY2UXO1VpOT68NwRDKiuW7nDlQudMtt4pckXufQKE MKpe3dLKjaOQ/T/lKw3TshBcd/ct1yyxtnl5z/FuO5eeLkb3jSw01Yz7OXtMg9ozUq8P qRkM5wWvowKcxz26SIPHMdfcS5HlN86F03VDFYjlRWDzYp12EN6SV9mjyJoAtb2ukT45 Dt/P3fWc5P00tH4iWwGP+TsvJPL+msBACohpamjn7ExInS1ArHhdflKw79vbw/r0o06f wna6k+H9Uh657Y70Y6kTYnN5Ozza9DreAhDAPqAlMdTapVibD5vw1hrZD37fB8kRgmYZ 1EGQ== X-Gm-Message-State: ACgBeo1Jyrc+fFkdBOr1QbaDJNAZmAfuqPTmoZ1uQKW3zieAqOp83H1p ywnoVdzHBMQCTrvFrlySI1Ey7vRyibv5bff7v5qNl7TRiQLXEwh7GWjRJru4lMqm75VfvNxqLli dBnFwpz3GFnTxCs1QLC7Mp4XNReFNeDIuW+OrNf5M2f7YxXt7O39Z3fTerNPdWWlgH6zlrGjOqg == X-Received: by 2002:a05:600c:4e01:b0:3a3:342:5f55 with SMTP id b1-20020a05600c4e0100b003a303425f55mr16855864wmq.150.1660063128165; Tue, 09 Aug 2022 09:38:48 -0700 (PDT) X-Google-Smtp-Source: AA6agR4CRMFzIDoUeR29Rw+JtrFtTBI4JZzfvAtZ/WmhfbIGqYbxMPTgs5yj/A+cmTfV42oriMeWrA== X-Received: by 2002:a05:600c:4e01:b0:3a3:342:5f55 with SMTP id b1-20020a05600c4e0100b003a303425f55mr16855849wmq.150.1660063127765; Tue, 09 Aug 2022 09:38:47 -0700 (PDT) Received: from localhost (15.72.115.87.dyn.plus.net. [87.115.72.15]) by smtp.gmail.com with ESMTPSA id t5-20020adff605000000b0021e5f32ade7sm13896213wrp.68.2022.08.09.09.38.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 09 Aug 2022 09:38:47 -0700 (PDT) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PUSHED] gdb/riscv/testsuite: fix failures in gdb.arch/riscv-reg-aliases.exp Date: Tue, 9 Aug 2022 17:38:44 +0100 Message-Id: <20220809163844.657930-1-aburgess@redhat.com> X-Mailer: git-send-email 2.25.4 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Aug 2022 16:38:52 -0000 When running on a native RISC-V Linux target I currently see failures in the gdb.arch/riscv-reg-aliases.exp test like this: set $ft0.float = 501 (gdb) PASS: gdb.arch/riscv-reg-aliases.exp: write non-zero value to ft0 p/d $ft0.float $263 = 1140490240 (gdb) FAIL: gdb.arch/riscv-reg-aliases.exp: read ft0 after non-zero write to ft0 This test started failing after this commit: commit 56262a931b7ca8ee3ec9104bc7e9e0b40cf3d64e Date: Thu Feb 17 13:43:59 2022 -0700 Change how "print/x" displays floating-point value The problem is that when 501 is written to $ft0.float the value is converted to floating point format and stored in the register. Prior to the above commit printing with /x and /d would first extract the value as a float, and then convert the value to an integer for display. After the above commit GDB now uses the raw register value when displaying /x and /d, and so we see this behaviour: (gdb) info registers $ft0 ft0 {float = 501, double = 5.6347704700123827e-315} (raw 0x0000000043fa8000) (gdb) p/f $ft0.float $1 = 501 (gdb) p/d $ft0.float $2 = 1140490240 (gdb) p/x $ft0.float $3 = 0x43fa8000 To fix this test I now print the float registers using the /f format rather than /d. With this change the test now passes. --- gdb/testsuite/gdb.arch/riscv-reg-aliases.exp | 32 ++++++++++++-------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp b/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp index 0c413a4d040..4c188b78b1f 100644 --- a/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp +++ b/gdb/testsuite/gdb.arch/riscv-reg-aliases.exp @@ -67,18 +67,22 @@ proc check_zero_register_value {testname} { # and we need to read/write using a ".float" extension. This is passed in # REG_EXTENSION. If no extension is needed then REG_EXTENSION is the empty # string. -proc check_setting_registers_to_zero { reg_set reg_extension } { +# +# PRINT_FMT is used when inspecting the registers, and should be a +# character that can be used in a GDB print command as an output +# format, e.g. 'd' (decimal), or 'f' (float). +proc check_setting_registers_to_zero { reg_set reg_extension print_fmt } { foreach reg_desc ${reg_set} { set primary_name [lindex ${reg_desc} 0] set alias_names [lindex ${reg_desc} 1] gdb_test_no_output "set \$${primary_name}${reg_extension} = 0" \ "set register ${primary_name} to an initial value of zero" - gdb_test "p/d \$${primary_name}${reg_extension}" " = 0" \ + gdb_test "p/${print_fmt} \$${primary_name}${reg_extension}" " = 0" \ "check the initial value of ${primary_name} is now zero" foreach reg_alias ${alias_names} { - gdb_test "p/d \$${reg_alias}${reg_extension}" " = 0" \ + gdb_test "p/${print_fmt} \$${reg_alias}${reg_extension}" " = 0" \ "check the initial value of ${reg_alias} is now zero" } } @@ -94,7 +98,11 @@ proc check_setting_registers_to_zero { reg_set reg_extension } { # of the aliases. # # The REG_EXTENSION field is used as in CHECK_SETTING_REGISTERS_TO_ZERO. -proc check_setting_registers_to_value { reg_set reg_extension reg_value } { +# +# PRINT_FMT is used when inspecting the registers, and should be a +# character that can be used in a GDB print command as an output +# format, e.g. 'd' (decimal), or 'f' (float). +proc check_setting_registers_to_value { reg_set reg_extension reg_value print_fmt } { foreach reg_desc ${reg_set} { set primary_name [lindex ${reg_desc} 0] set alias_names [lindex ${reg_desc} 1] @@ -104,10 +112,10 @@ proc check_setting_registers_to_value { reg_set reg_extension reg_value } { set reg_value [incr reg_value] gdb_test_no_output "set \$${primary_name}${reg_extension} = $reg_value" \ "write non-zero value to ${primary_name}" - gdb_test "p/d \$${primary_name}${reg_extension}" " = $reg_value" \ + gdb_test "p/${print_fmt} \$${primary_name}${reg_extension}" " = $reg_value" \ "read ${primary_name} after non-zero write to ${primary_name}" foreach reg_alias ${alias_names} { - gdb_test "p/d \$${reg_alias}${reg_extension}" " = $reg_value" \ + gdb_test "p/${print_fmt} \$${reg_alias}${reg_extension}" " = $reg_value" \ "read ${reg_alias} after non-zero write to ${primary_name}" } @@ -119,11 +127,11 @@ proc check_setting_registers_to_value { reg_set reg_extension reg_value } { gdb_test_no_output "set \$${reg_alias}${reg_extension} = $reg_value" \ "write non-zero value to ${reg_alias}" - gdb_test "p/d \$${primary_name}${reg_extension}" " = $reg_value" \ + gdb_test "p/${print_fmt} \$${primary_name}${reg_extension}" " = $reg_value" \ "read ${primary_name} after non-zero write to ${reg_alias}" foreach other_reg_alias ${alias_names} { - gdb_test "p/d \$${other_reg_alias}${reg_extension}" " = $reg_value" \ + gdb_test "p/${print_fmt} \$${other_reg_alias}${reg_extension}" " = $reg_value" \ "read ${other_reg_alias} after non-zero write to ${reg_alias}" } } @@ -173,10 +181,10 @@ gdb_assert ![string eq "${freg_extension}" "INVALID"] \ # Now check that we can write zero, and read zero back to all of the integer # and floating point registers. -check_setting_registers_to_zero ${xreg_names} "" +check_setting_registers_to_zero ${xreg_names} "" "d" if { ! $skip_freg_tests } { - check_setting_registers_to_zero ${freg_names} ${freg_extension} + check_setting_registers_to_zero ${freg_names} ${freg_extension} "f" } # Set each register in turn to a new value, and confirm that the new value can @@ -184,8 +192,8 @@ if { ! $skip_freg_tests } { # value passed in to each test invocation here is arbitrary, they are # significantly different so that the float tests don't reuse value from the # integer tests. -check_setting_registers_to_value ${xreg_names} "" 100 +check_setting_registers_to_value ${xreg_names} "" 100 "d" if { ! $skip_freg_tests } { - check_setting_registers_to_value ${freg_names} ${freg_extension} 500 + check_setting_registers_to_value ${freg_names} ${freg_extension} 500 "f" } -- 2.25.4