From patchwork Tue Apr 2 20:17:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Kaplun X-Patchwork-Id: 87947 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6908E388703A for ; Tue, 2 Apr 2024 20:18:34 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp33.i.mail.ru (smtp33.i.mail.ru [95.163.41.74]) by sourceware.org (Postfix) with ESMTPS id 71E0C386EC72 for ; Tue, 2 Apr 2024 20:18:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 71E0C386EC72 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=mail.ru Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mail.ru ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 71E0C386EC72 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=95.163.41.74 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712089085; cv=none; b=W368g2ln0ElVz02zJy1qfOxauI6+D4HY0N587zP01h4Q1Eu1d/WGOtQmQnNV1LmLAl4Tqs8YfqU7/wgvGZOShiD5BS3k6gRInwJC2R/q79KZTPdhA9eLv4vdUE/XOd4apJt4nagNI/vIu7Fg+bpKMzv/efMAaY+OsciOfNWk9R0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712089085; c=relaxed/simple; bh=pv1FvOE9KLI+DZf/qH6yz3OHqLYOHoe+64BaWfeOQQ0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=pdUQzohY1nrNxZpF9w0WUhkaWcYH8dx+XCcUnx5hr2rbqnO0FsT/v7UtEX/8f5sFR9AehPIfd6ydjASqEfk20grL2DidALsn+/K89daqWJ+Fq4U/GGl5Wq9REOsw1uOeI3CPOVbAeT/zzd4oI7p7+R7BzTKgza1YGatGeWMUlIo= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail4; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:From:Sender:Reply-To:To:Cc:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive: X-Cloud-Ids:Disposition-Notification-To; bh=4fDhZi3X3kOw6cJzJOZNPr2xxLjlIC89gyJvVVnHG1c=; t=1712089082; x=1712179082; b=XC5/9Q18c5XUMmZIKnbnlyS0LoyOQoiWSBJBE8EgcNPSEK0xEIiDX7QwNTFMHeQmAvQCH519dYn GmaOgLAnuctR/dAGFJpqHfMJwsaNKKNbS6Epl57zptyHE9BpD2q5vYzY22SgfTfjebkpmORG5LNti lJJcnDndT+Yv8sFrEbZRyEUL+7KMAUNzDmYm5LwRi7gjc9HdUC2FnQSsdV2YOr+zdsAEIC80bCeKc cOrKFIVSmCA8UCXv7/s8MT9edKa417p3ovXD0s2uD8JnkART7ZbbKtFu4a982UDVuTH6WVXyj1iyb qPsoLAiGBa8qB+AyfsNcge1TyYjIsW3hPCYA==; Received: by smtp33.i.mail.ru with esmtpa (envelope-from ) id 1rrka0-00000001qSd-24qU; Tue, 02 Apr 2024 23:18:00 +0300 From: Sergey Kaplun To: gdb-patches@sourceware.org Cc: Sergey Kaplun Subject: [PATCH v1 1/2] gdb/testsuite: enable back gdb.base/bitshift.exp Date: Tue, 2 Apr 2024 23:17:57 +0300 Message-ID: <60f4aaac945cdae542fd92bc61b6d8fb828fa80a.1712086444.git.sergey_v_kaplun@mail.ru> X-Mailer: git-send-email 2.43.2 In-Reply-To: References: MIME-Version: 1.0 Authentication-Results: smtp33.i.mail.ru; auth=pass smtp.auth=sergey_v_kaplun@mail.ru smtp.mailfrom=sergey_v_kaplun@mail.ru X-Mailru-Src: smtp X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9D135BF24EC7C3B84B795204784878B9696B7A3A0375B3BCA182A05F538085040CF647765DB39BAC89487ABAC94A94B542BE6C10B517C6BDE4D6197B2AB0C9E227AE8E57E538EEBEE X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE73B2A9F8A35432468EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637525B22DCF689D4638638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8E6F16A774BF26BB29DA389CB1A35E69824C5EBAD3F2B13D020879F7C8C5043D14489FFFB0AA5F4BF176DF2183F8FC7C0ECC8AC47CD0EDEFF8941B15DA834481FA18204E546F3947C8ED1AC82D843A2BBF6B57BC7E64490618DEB871D839B7333395957E7521B51C2DFABB839C843B9C08941B15DA834481F8AA50765F790063706C07FE7DDBB4AB7389733CBF5DBD5E9B5C8C57E37DE458BD9DD9810294C998ED8FC6C240DEA76428AA50765F7900637F6FE7C89BE6A8FE1D81D268191BDAD3DBD4B6F7A4D31EC0BE2F48590F00D11D6D81D268191BDAD3D78DA827A17800CE753AC04FE94C64221EC76A7562686271ED91E3A1F190DE8FD2E808ACE2090B5E14AD6D5ED66289B5278DA827A17800CE76631511D42670FFE2EB15956EA79C166A417C69337E82CC275ECD9A6C639B01B78DA827A17800CE783573928F8DF1ADB731C566533BA786AA5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A57C0ECFC0A6E409085002B1117B3ED69632D3A8E2677D7B6B92212597CCBD6D77823CB91A9FED034534781492E4B8EEAD14747542773C033FC79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0ADBF74143AD284FC7177DD89D51EBB7742DC8270968E61249B1004E42C50DC4CA955A7F0CF078B5EC49A30900B95165D34D4140D813EC137C6059A6264B39AF014A5562B3D4125961F65F6369EB004544E3D5A7B8FDB3AECA11D7E09C32AA3244C72778F4D056B5E98A9A6C043C55A4F638BE180B71E217FCFEA455F16B58544A2E30DDF7C44BCB90DA5AE236DF995FB596876D1437B5458BC08F8711F4D97DF1124A389F0E278DBF4 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojmSy8L1hSZUNhMmEkXdFhnw== X-Mailru-Sender: 583F1D7ACE8F49BD4747F3DF20327BFB67A454E5EA3F803784F268382E0D69138347E77303B78E1CE04AC020E6A39440160348CE3D9367842C22B24405C8F0CC0C99F7F8EF33C0CE4F0A872F021F90597E6EE165445FBF8EC77752E0C033A69E3453F38A29522196 X-Mras: Ok X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, TXREP 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.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Since commit cdd4206647d0 ("gdb/testsuite: fix "continue outside of loop" TCL errors"), all tests in gdb.base/bitshift.exp are skipped due to an early return after matching the "ada" language. This patch enables all tests and adds "opencl" to the skip list since some test cases aren't handled correctly for it. Also, since commit 303a881f8789 ("Use gdb_gmp for scalar arithmetic"), 0 instead of -1 is returned for signed negative values shifted by a negative number, which contradicts Go semantics. So, this patch fixes the semantics and restores the deleted comment. --- gdb/testsuite/gdb.base/bitshift.exp | 4 ++-- gdb/valarith.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/gdb/testsuite/gdb.base/bitshift.exp b/gdb/testsuite/gdb.base/bitshift.exp index cfb1e7b9820..806886cc1bf 100644 --- a/gdb/testsuite/gdb.base/bitshift.exp +++ b/gdb/testsuite/gdb.base/bitshift.exp @@ -175,10 +175,10 @@ proc test_shifts {} { foreach_with_prefix lang $supported_langs { set skip_langs { - "unknown" "ada" "modula-2" "pascal" "fortran" + "ada" "fortran" "modula-2" "opencl" "pascal" "unknown" } if {[lsearch -exact $skip_langs $lang] >= 0} { - return + continue } gdb_test_no_output "set language $lang" diff --git a/gdb/valarith.c b/gdb/valarith.c index 6b152cadcac..50ef6d2b92e 100644 --- a/gdb/valarith.c +++ b/gdb/valarith.c @@ -1302,7 +1302,16 @@ scalar_binop (struct value *arg1, struct value *arg2, enum exp_opcode op) { unsigned long nbits; if (!check_valid_shift_count (op, result_type, type2, v2, nbits)) - v = 0; + /* Pretend the too-large shift was decomposed in a + number of smaller shifts. An arithmetic signed + right shift of a negative number always yields -1 + with such semantics. This is the right thing to + do for Go, and we might as well do it for + languages where it is undefined. Also, pretend a + shift by a negative number was a shift by the + negative number cast to unsigned, which is the + same as shifting by a too-large number. */ + v = (!result_type->is_unsigned () && v1 < 0) ? -1 : 0; else v = v1 >> nbits; } From patchwork Tue Apr 2 20:17:58 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergey Kaplun X-Patchwork-Id: 87948 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D57513889806 for ; Tue, 2 Apr 2024 20:18:44 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp33.i.mail.ru (smtp33.i.mail.ru [95.163.41.74]) by sourceware.org (Postfix) with ESMTPS id 8B8623861806 for ; Tue, 2 Apr 2024 20:18:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8B8623861806 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=mail.ru Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mail.ru ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8B8623861806 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=95.163.41.74 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712089085; cv=none; b=APs1BB0uEh9JEuGmpyq8HesZnB16g021MCKv17Mv39wjtnUlWsxjcnffFzNDTjOiV0VWplrPiY0ap6A0AXAUVmWnjFQEuyyVKwT3/Dyd+9d+ZhGk0XQjX9nONv1pTntXNB7rbv57DPMzn8w9elmklQAZoiiNwzQAlnSZehW640M= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712089085; c=relaxed/simple; bh=NBinqQrVzZJbibF7rddD1095BFO7gvanYsuhQjMx9as=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=gK4t9RLCYRY1nfwGMXXz2IjIpwMWTveHJvjTPMvB5AOZzg2SemXgKjolQpeDx7RERbniAZ1Xi5Qcz5QJ7OPnlSvclTuPRBv+XkDsu1LTZhAHz4S+ckL0Qe0dA9tsQnff/fc822FIsIIG4sDdvOeT/0q01MMQhx4h2oQpDhb9afg= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail4; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:From:Sender:Reply-To:To:Cc:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive: X-Cloud-Ids:Disposition-Notification-To; bh=V6e9tsHIHPuTSBBWBP90Tr6bf4Paw+93Pm0z+1YFceA=; t=1712089082; x=1712179082; b=aEHwkUxA+hlZ/z/B7YfbAEziKO7LkiOvTjlCU+Sqcu27T4uU7tBfi1n2w2XAdJFs256v61mGqp2 MKkceU/UosYV7pl+U6YqXwJifRoN2AxQ10nsFqig+XpcUR3SFTpBePoz3bWnIz8mr8nN8XJcIMpiW S1S6KEwU5wEpsc4iZciLMJSvwxeBft/AtKk5konGdSAf/+OurX7UbzKVe29vOLVVmahsukudYh9JI ArqQ0f1fJ9nk3SlfiyfzpGbt3jDv2HxxtIdg1qYy9Ranzo5AH1MOUadSIa/R9HfR0mTI8DzMXITSY ohEbDH06VWPH0LuR0VihBpgwj1D+304Wv3Cw==; Received: by smtp33.i.mail.ru with esmtpa (envelope-from ) id 1rrka0-00000001qSd-3m1w; Tue, 02 Apr 2024 23:18:01 +0300 From: Sergey Kaplun To: gdb-patches@sourceware.org Cc: Sergey Kaplun Subject: [PATCH v1 2/2] Fix the right shift of negative numbers Date: Tue, 2 Apr 2024 23:17:58 +0300 Message-ID: <1ec0c7b71c5dcc85d194aad7acf0e4e3b4c21527.1712086444.git.sergey_v_kaplun@mail.ru> X-Mailer: git-send-email 2.43.2 In-Reply-To: References: MIME-Version: 1.0 Authentication-Results: smtp33.i.mail.ru; auth=pass smtp.auth=sergey_v_kaplun@mail.ru smtp.mailfrom=sergey_v_kaplun@mail.ru X-Mailru-Src: smtp X-7564579A: EEAE043A70213CC8 X-77F55803: 4F1203BC0FB41BD9A6CD9ED7FA2D9CC9A100C9D52C6E91DFD956B63951F4B03D1313CFAB8367EF908E2BE116634AD74D99E007FB9DE256BC2FF179000BF0C848E136126466B4E111EB78924A8C5CD7FE4A43D3E7D3A7B3F6 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7011EB7026DD4A9BAEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006379C6BD13E0D9523298638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8E6F16A774BF26BB29DA389CB1A35E69871AFE39F5DEB2E5E20879F7C8C5043D14489FFFB0AA5F4BF176DF2183F8FC7C06030C3405640F6718941B15DA834481FA18204E546F3947CFE4D9CDE3FF759CFF6B57BC7E64490618DEB871D839B7333395957E7521B51C2DFABB839C843B9C08941B15DA834481F8AA50765F7900637FBF931FEADDDACF0389733CBF5DBD5E9B5C8C57E37DE458BD9DD9810294C998ED8FC6C240DEA76428AA50765F7900637EB52220108A1A954D81D268191BDAD3DBD4B6F7A4D31EC0BE2F48590F00D11D6D81D268191BDAD3D78DA827A17800CE7DD5D117F5FD577DDEC76A7562686271ED91E3A1F190DE8FD2E808ACE2090B5E14AD6D5ED66289B5278DA827A17800CE76631511D42670FFE2EB15956EA79C166A417C69337E82CC275ECD9A6C639B01B78DA827A17800CE783573928F8DF1ADB731C566533BA786AA5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A57C0ECFC0A6E409085002B1117B3ED69626B60D8DF2B5C5EC30E4A65F242F5898823CB91A9FED034534781492E4B8EEAD21D4E6D365FE45D1C79554A2A72441328621D336A7BC284946AD531847A6065A535571D14F44ED41 X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF77DD89D51EBB7742D3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CF3E2A6F2D5A9AC2AB0CB534C6DD7C2EDCADAC09DB4AFBE3DA2F9F3289FD4C95E23D4CAFFB26F46A3D58CF1FE2B37DBE106DF5582518BA9CDE24C7178CAE2AE7EBACEC812952D1FF33111DC66A97D0BFE2913E6812662D5F2AB9AF64DB468876803B9091C2F776607721F8114A732E981437E69C174A41D00C X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojmSy8L1hSZUOYEwV+seI1zw== X-Mailru-Sender: 583F1D7ACE8F49BD4747F3DF20327BFB67A454E5EA3F803784F268382E0D6913FC0920703C89B6C421C6BD6F04BD51C9160348CE3D9367842C22B24405C8F0CC0C99F7F8EF33C0CE4F0A872F021F90597E6EE165445FBF8EC77752E0C033A69E3453F38A29522196 X-Mras: Ok X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, PDS_BTC_ID, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS, TXREP 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.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Since commit 303a881f8789 ("Use gdb_gmp for scalar arithmetic"), the incorrect values are returned for the right shift of negative numbers, which are truncated during the division. ``` (gdb) p /t -3 $1 = 11111111111111111111111111111101 (gdb) p /t -3 >> 1 $2 = 11111111111111111111111111111111 ``` According to the documentation of gmplib [1]: ``` For positive n both mpz_fdiv_q_2exp and mpz_tdiv_q_2exp are simple bitwise right shifts. For negative n, mpz_fdiv_q_2exp is effectively an arithmetic right shift treating n as twos complement the same as the bitwise logical functions do, whereas mpz_tdiv_q_2exp effectively treats n as sign and magnitude. ``` So, use the mpz_fdiv_q_2exp variant to avoid truncation for negative values since the behaviour for positive values is equivalent. [1]: https://gmplib.org/gmp-man-6.2.1.pdf#Integer%20Division --- gdb/gmp-utils.h | 4 ++-- gdb/testsuite/gdb.base/bitshift.exp | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/gdb/gmp-utils.h b/gdb/gmp-utils.h index 51e06abc050..878ce1da43a 100644 --- a/gdb/gmp-utils.h +++ b/gdb/gmp-utils.h @@ -280,13 +280,13 @@ struct gdb_mpz gdb_mpz operator>> (unsigned long nbits) const { gdb_mpz result; - mpz_tdiv_q_2exp (result.m_val, m_val, nbits); + mpz_fdiv_q_2exp (result.m_val, m_val, nbits); return result; } gdb_mpz &operator>>= (unsigned long nbits) { - mpz_tdiv_q_2exp (m_val, m_val, nbits); + mpz_fdiv_q_2exp (m_val, m_val, nbits); return *this; } diff --git a/gdb/testsuite/gdb.base/bitshift.exp b/gdb/testsuite/gdb.base/bitshift.exp index 806886cc1bf..0bc99cc438f 100644 --- a/gdb/testsuite/gdb.base/bitshift.exp +++ b/gdb/testsuite/gdb.base/bitshift.exp @@ -346,6 +346,9 @@ proc test_shifts {} { test_shift $lang "print -1 >> 1" " = -1" test_shift $lang "print -8 >> 1" " = -4" test_shift $lang "print [make_int64 $lang -8] >> 1" " = -4" + # Make sure an negative value isn't truncated by shift + # operator. + test_shift $lang "print -3 >> 1" " = -2" } # Make sure an unsigned 64-bit value with high bit set isn't