From patchwork Sun May 31 16:37:26 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Waroquiers X-Patchwork-Id: 136140 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C38AB4BA23F4 for ; Sun, 31 May 2026 16:39:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C38AB4BA23F4 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=skynet.be header.i=@skynet.be header.a=rsa-sha256 header.s=rmail2 header.b=UDv7NmRj X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mailsec212.isp.belgacom.be (mailsec212.isp.belgacom.be [195.238.22.108]) by sourceware.org (Postfix) with ESMTPS id B43DC4BA23D7 for ; Sun, 31 May 2026 16:38:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B43DC4BA23D7 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=skynet.be Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=skynet.be ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B43DC4BA23D7 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=195.238.22.108 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780245499; cv=none; b=FAlw0RLGGMY9OEWrO7Rl6s9zryGGDYUMk2DiAx+rBPokAS66SmVleV5pdV1LRKdBN4OfbgAi7H/QWraSnupyaHhIDxhykmV+pql9BeEk5rrb/o7Sd5hk7YiLyEk8uIn5mtehA84+gAgglJJJAPvo85mVDjJBhhMTGP7ZYrdbpEg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1780245499; c=relaxed/simple; bh=WjnOWHSnJOZ1ZUizhmZxGSQj/r0999KQndC4Np27Ek0=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=ezOwuAVtujONw39JGQm86BDFiHxdvmP0BL/w5tGAwo/xBjGbwaPllMIsBYJHps9n7jy2tNsZdvjAGyD5SlY73zayh5TBSU2Ch5cGSitA9KAaMJ8zw0LXqUC+PoaIMpr8jZKy2+ebE08TL2tH2Ei6X+epyQ4jpDoUNzQM7TqiGRA= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=skynet.be header.i=@skynet.be header.a=rsa-sha256 header.s=rmail2 header.b=UDv7NmRj DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B43DC4BA23D7 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=skynet.be; i=@skynet.be; q=dns/txt; s=rmail2; t=1780245498; x=1811781498; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lM6nSb51VQmYbM6RdNDN+9PUOtL62l8GimAinBEGsPI=; b=UDv7NmRjXudpXWOQxj2wwdEYxR+u5SPcwqftqM7VOFhi9EVevfwCbkWY 7k5l/JXWfUXSzhUChV0ld3+SMALR/4TnGj2Lzh79gEUHOrD8FMphSGjkE ZH4o0KL2f4oTehSUIpSa5LqSrj/fhqLqNbqTPxdM6hTwSdXQvucQ3ciha tpg6WAvrXOtXWSmJljEwvShC+/7oNewAwRr3hsMir6HCYLT2BO0RPa/pD wAzscPuBosv/s7xQ+nlI26BkUYMQpp425flVYnYxy8yLej6WQ75UULZgI IKHdNCEGC8KubJwEuUztwby0QUXGs2lv1RxFqOo4Gy2/Xv0N7xqG88/// g==; X-CSE-ConnectionGUID: JHp+UVBlSVmKbSdYNChtBg== X-CSE-MsgGUID: 4apmpXMGTeOBnj0+SND7TQ== X-ExtLoop: 1 X-ThreatScanner-Verdict: Negative X-IPAS-Result: A2EUAgBaYxxq/1uGgG1agRKBR4JXt0aBfg8BAQEBAQEBAQEJUQQBAYUGAo00JzQJDgECBAMCAwEBAQEBAQEBAQEBCwEBAQUBAQEBAQEGBAEBAQKBHYYJU4JbhAgGJwsBRhBRVoMbgnS2CDOBAYR92USBZAELFAGBOIVxh2uFbzaBVUSBFYJ5hX+FdwSDHBKBe41CSIEeA1ksAVUTDQoLBwWBZgM1EgYkFTI8Mh2BIz4XgQsbBwWBSnYwBQKBJYEERYRTIx8DOYEXgX+BK0gDCxgNSBEsNxQbBD5uB41/BwGBDoFLpGGiezQHhB+BYAYMn2kaM6pqAZkGpFiEaIFoghZtgztSGQ+OX84KgTYHAgcPApIngUsBAQ IronPort-PHdr: A9a23:yL5thR3ux2DmWtF1smDOFAMyDhhOgF0UFjAc5pdvsb9SaKPrp82kY BeCo601xwaWA9mHo7Ic0qyK6PymATRBqb+681k8M7V0HycfjssXmwFySOWkMmbcaNPMUWkRM f8GamVY+WqmO1NeAsf0ag6aiHSz6TkPBke3blItdaz6FYHIksu4yf259YHNbAVUnjq9Zq55I AmroQnLucQbj4tvJrwtxhfVrXdEZuZbyGJnKF+cgh3w4tu88IN5/ylftf8s+NRMXbnmc6g9U LdVECkoP2cp6cLkshXOURGB7WYGXGUMlRpIDQnF7BXkUZr0ryD3qOlz1jSEMMPvVbw6Viys4 KhyRBL2hykJKiY1/27LhMN+iqJbuw+hqAdkw4HIeoGVNeFxcb3bcNgHWGdORMdRVyhGAoOhc 4sCCvcKMOhEo4XhoVYFsB2zDhSuCuzy0D9Fnn/407Mk3uo8Hw/I3wsuENAAsHvbo9v4L7seX OOvwaXU1zjPc+9a1DHg44bIaBAhpvSMUKpqf8rRyEkvEwLFjk2IqYP7Ijia1v4Cs3Kc7+p5S OKvinAoqxtqojOywcoskonJhoMRylDF7SV52Jg6Kce2SUFhe96kF4JQtzybN4RoWMMiWHplu D05yrwGv560YjQKxI48yBHBcvGKdZWD7R3/WuiLOzh4mG5ld6ylhxa06UWtyPDwWMmq3VtKo SRJjNnCuH8D2RDP5cWKTvVw8lq91DuAywze7v1JLE46mKfGL5Ms3LE9m4QTvEnfAiP7mkr7g amLfUsn4uil8/nrbqniq5OGKoN4lALzPr4zlsGxDuk0KAwDU3Wd9O+hzrPs51f5T69PjvAul 6nZt43VKtoDq66iBg9Vzp4j6xGiDze6yNgYnWcILFZCeB+fiojmJkvCIPD/Dfe6nVugiDZrx /bYMb39GpjBM2TPnbP7cbpg9UJRyxA/wc1R6p9bEL0MJO//Vlf0tNPCDx85NwK0w/zgCNV4z o4eQWKPAq6dMKPTqV+I/vwgL/OCZYAPojb9LOEl5+PvjXAng18dZrKk3YAUaHG4GPRpPVmZb WD3jdgfCWsKpBYxTPT2iF2eVj5ef3myUL8n6T0iEIKpF5vDSZytgLOfxye2BYZWZmdbClCWD XjnaYuFVO0WaC2MOMNhlSYEVbe5R487yR6urBP6y6ZgLufM4i0YtZPj1Nx05+3LjRE96yZ4D sqH3GGXSGF0h34IRz4o06Blukxw0UyD0at4gvxeC9NT++lFXRwkOpLEyex1EMj9WhjdcdeRV FamXtKmDCkvQt4p2d8BfVh9Fda4gB3b2yemHqUZm6GFCZE7667Qwmb9KsVkx3rbyKUsi0MqT dFSOm29gq5z7hXcBo7Pk0mDlqaqbrwc0DTW+2idyWqOs1tXXxJ3UaXAR3wQfVXZoczk6UPBT r+uDKwqPBNOx8GMNKVEdsHkg1NeSPj+PdTReXixlHuoCBiQ372CdIXkd30G3CXFBkgJixgd8 2+eOwYxHiuhuHreDDJ2GlLvfUzs9e5+pWujQEEt1w+EYB4p673g9RIfwOSVV/gT06ksoyA8s T55A1+n0pTREdXTiRBmefBkYdI54U9f2CrmvhZ6J4GhIrp5zgoGcwVzvlv22lNoA59HiNUro Wkx5BFxOKSVzBVLemXLjtjLJrTLJzyqr1iUYKnM1wSGuOs= IronPort-Data: A9a23:3gb0oKxtPAjzXFl9i9V6t+cuxyrEfRIJ4+MujC+fZmUNrF6WrkUBn zMdDW+DPqmMYmbwedogPImy9EpXv8XSztNrSFNqrS00HyNBpOP7XtnIdU2Y0wF+jyHgZBs5s JpBMICeRCwQZiaE/n9B55C78CEUOZmgH+S6UKicfHgsGWeIcQ954Tp7gek1n4V0ttawBgKJq LvartbWULOf82cc3lk8teTZ9HuDgNyo4GlG5gFlPKgS1LPjvyB94Kw3dPnZw0TQH9E88t6SH 47r0Ly/92XFyBYhYvvNuqr7aEADXonJNgGIjHdMM4D66vSVjnVvukqTHKN0hXZ/011lrfgoo Dl+ncXYpTMSA0H5sL91vy9wSn8hYvIcoeGvzU+X6qR/x2WeG5flLm4H4EseZeX08c4vaY1CG GBxxJngoXlvisrvqI9XRNWAiewBDNGoAb01vkpeyBLTNvoXZ7vDX4/FsIowMDcY3qiiHN7ba 4wZbj9iBPjCS0QXaxFOUsJ4xbz0wCimG9FbgAv9Sa4f+2jSyA1pyLWrL9PPfcWXRMhPhW6Dp XPA8ni/CBxy2Nm3mGbaoi322b6ncSXTBIsKEaWI09FWjXq5wG5LSyYweQSHmKzs4qK5c5cFQ 6AOwQIhoaJ37EW3RdnwRDWjp2OetRMDUsBdVeog52ml0qrV5weBHmVCUTdbb8U7tcIsXhQx1 U6Pks+vDzEHjVGOYSPEsO7P8XbrY3hQdDdTIyYIVg9A78jl5oAollTFQ9JsGaWyi5v/FFkc3 gy3kcT3vJ1L5eZj6klx1Qmvb+6EznQCcuL5Csg7kI5oAsOVqbNJv7CV1GU= IronPort-HdrOrdr: A9a23:rxFM2aOyOPUtUcBcTg+jsMiBIKoaSvp037BK7TELdfU1SL3+qy nKpp8mPHDP5wr5NEtPpTnEAtjifZq+z/JICOsqTNKftWDd0QPDQb2Kr7GSoQEIcBefygcy78 Zdm6MXMqyAMbCy5/yKnzVQROxQpuVuAcqT9JvjJxAEd3AVV0kxhz0Jbjpy8CBNNXB77WNVLu vn2iKjygDQBEj+iqmAdwE4Y9Q= X-Talos-CUID: 9a23:ojQQjGMTqAWQJu5Degl/t3MqMMQeTHj+xkzcEmmTCXpDR+jA X-Talos-MUID: 9a23:5wj9GQ0b2e92icPQ2D/pU0zFdzUjv622DVg9tLo6tu6uMy4oeAy7oGuLe9py X-IronPort-Anti-Spam-Filtered: true Received: from 91.134-128-109.adsl-dyn.isp.belgacom.be (HELO md.home) ([109.128.134.91]) by relay.proximus.be with ESMTP/TLS/TLS_AES_256_GCM_SHA384; 31 May 2026 18:38:08 +0200 From: Philippe Waroquiers To: gdb-patches@sourceware.org Cc: Philippe Waroquiers Subject: [PATCH] Fix double apropos output when both alias name and command name match the pattern Date: Sun, 31 May 2026 18:37:26 +0200 Message-ID: <20260531163756.781643-2-philippe.waroquiers@skynet.be> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260531163756.781643-1-philippe.waroquiers@skynet.be> References: <20260531163756.781643-1-philippe.waroquiers@skynet.be> MIME-Version: 1.0 X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_PBL, SPF_HELO_PASS, SPF_PASS, TXREP, URIBL_BLOCKED shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on 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 apropos_cmd first tries to match the command name with the pattern. If that succeeds, it prints the command and all its aliases not having a specific doc string. In this case, it should not try to match the command aliases names as the command has already been printed. Without this patch, the behaviour is: (gdb) alias ter-exec = interpreter-exec (gdb) apropos er-exe interpreter-exec, ter-exec -- Execute a command in an interpreter. interpreter-exec, ter-exec -- Execute a command in an interpreter. (gdb) --- gdb/cli/cli-decode.c | 18 ++++++++++-------- gdb/testsuite/gdb.base/help.exp | 8 ++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index de40faeed59..36f911c2cd6 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -1784,16 +1784,18 @@ apropos_cmd (struct ui_file *stream, returnvalue = regex.search (c->name, name_len, 0, name_len, NULL); if (returnvalue >= 0) print_doc_of_command (*c, verbose, regex, stream); - - /* Try to match against the name of the aliases. */ - for (const cmd_list_element &alias : c->aliases) + else { - name_len = strlen (alias.name); - returnvalue = regex.search (alias.name, name_len, 0, name_len, NULL); - if (returnvalue >= 0) + /* Try to match against the name of the aliases. */ + for (const cmd_list_element &alias : c->aliases) { - print_doc_of_command (*c, verbose, regex, stream); - break; + name_len = strlen (alias.name); + returnvalue = regex.search (alias.name, name_len, 0, name_len, NULL); + if (returnvalue >= 0) + { + print_doc_of_command (*c, verbose, regex, stream); + break; + } } } } diff --git a/gdb/testsuite/gdb.base/help.exp b/gdb/testsuite/gdb.base/help.exp index a8c55721ef2..6a88c8d4db2 100644 --- a/gdb/testsuite/gdb.base/help.exp +++ b/gdb/testsuite/gdb.base/help.exp @@ -135,6 +135,14 @@ gdb_test_no_output "alias mybt10 = backtrace 10" "define mybt10 alias" gdb_test "apropos Print backtrace of all stack frames, or innermost COUNT frames\." \ "backtrace, mybt10, mybt, where, bt -- Print backtrace of all stack frames, or innermost COUNT frames\.\[\r\n\]+ alias mybt10 = backtrace 10" +# Test apropos when both the alias name and the aliased command match the pattern. +gdb_test_no_output "alias ter-exec = interpreter-exec" "define ter-exec alias" +gdb_test_multiple "apropos er-exe" "check we have a single output line when alias and command name match" { + -re "^apropos er-exe\r\ninterpreter-exec, ter-exec -- Execute a command in an interpreter\.\r\n$gdb_prompt $" { + pass $gdb_test_name + } +} + # Test help for commands having aliases. gdb_test "help bt" "backtrace, mybt10, mybt, where, bt\[\r\n\]+ alias mybt10 = backtrace 10\[\r\n\]+Print backtrace of all stack frames, or innermost COUNT frames\..*"