From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id cLaCGiJ9WWgt1hoAWB0awg (envelope-from ) for ; Mon, 23 Jun 2025 12:13:22 -0400 Received: by simark.ca (Postfix, from userid 112) id 66DFC1E11C; Mon, 23 Jun 2025 12:13:22 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-9.0 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_VALIDITY_CERTIFIED, RCVD_IN_VALIDITY_RPBL,RCVD_IN_VALIDITY_SAFE autolearn=ham autolearn_force=no version=4.0.1 Received: from server2.sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id A76D91E0C2 for ; Mon, 23 Jun 2025 12:13:21 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 526C33846707 for ; Mon, 23 Jun 2025 16:13:21 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 526C33846707 Received: from us-smtp-delivery-114.mimecast.com (us-smtp-delivery-114.mimecast.com [170.10.133.114]) by sourceware.org (Postfix) with ESMTP id A90423846E6C for ; Mon, 23 Jun 2025 16:11:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org A90423846E6C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=labware.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=labware.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org A90423846E6C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.133.114 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1750695089; cv=none; b=X4mb98t6sEvCOqpDXb0X5tT49+HjeaRtvc4odvLLmcwqxeC2p/goi+OhONTEs88WCVU7Y9aF+4CsODn+A31/kWsXqVrqcVXR1T5enPi20e0BS7Wi4zVPRCQmdvEi/Jhic1e5V37L0B6uVEg2AwqKEFHA+E7XpiQZjeJ3249SCpg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1750695089; c=relaxed/simple; bh=ZM5LSDR2vKVlBM5U31hM2tUN1vCpgbum5pLTrhdzPRc=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=ROMQs8B50c+wJ3N7R8EJikNxvD8VKUQD5JRFabtpc47RYf3yUZMtv4Cg8XA117vmhoQnyQ9uF3ele5cbdysmbnhdYqk5nHR8pGFhvez2tLkbR+rODmC2X4/C6Ex6CLPRakoNL0ZAjE5God9vl7jpZpMGcbLlzOF+zATpHJQuaI8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A90423846E6C Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2123.outbound.protection.outlook.com [40.107.243.123]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-84-wJgm2R19OeCJLH41fDVY3g-2; Mon, 23 Jun 2025 12:11:28 -0400 X-MC-Unique: wJgm2R19OeCJLH41fDVY3g-2 X-Mimecast-MFC-AGG-ID: wJgm2R19OeCJLH41fDVY3g_1750695087 Received: from SA1PR17MB5365.namprd17.prod.outlook.com (2603:10b6:806:1d8::11) by CH3PR17MB6292.namprd17.prod.outlook.com (2603:10b6:610:14b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.27; Mon, 23 Jun 2025 16:11:26 +0000 Received: from SA1PR17MB5365.namprd17.prod.outlook.com ([fe80::6398:7dc0:7d88:5a4d]) by SA1PR17MB5365.namprd17.prod.outlook.com ([fe80::6398:7dc0:7d88:5a4d%5]) with mapi id 15.20.8857.026; Mon, 23 Jun 2025 16:11:26 +0000 From: Jan Vrany To: gdb-patches@sourceware.org CC: Jan Vrany , Eli Zaretskii Subject: [RFC v5 14/18] gdb/python: add add_symbol () method to gdb.Block Date: Mon, 23 Jun 2025 17:10:09 +0100 Message-ID: <20250623161013.650814-15-jan.vrany@labware.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250623161013.650814-1-jan.vrany@labware.com> References: <20250623161013.650814-1-jan.vrany@labware.com> X-ClientProxiedBy: LO4P123CA0610.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:314::12) To SA1PR17MB5365.namprd17.prod.outlook.com (2603:10b6:806:1d8::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA1PR17MB5365:EE_|CH3PR17MB6292:EE_ X-MS-Office365-Filtering-Correlation-Id: 61687c59-0cb8-4979-936a-08ddb2709ac7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024 X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?jYBGy686tpsNZNJtMM/8800UEr6exIYAEI7wvjCj00ZNUQdeUJobUiMJvL7C?= =?us-ascii?Q?fo/6w2ySfxQszUfAp9a3sFKmflJ9oeH0B8o/QitQ2T7DOVxlHIc9NlkQTE6q?= =?us-ascii?Q?PRM8xvtCjxAC65N9xomJacM9KDcV7TNPYmDw0PQ5jRkaeQ+jCSY2Ggs8Z3vG?= =?us-ascii?Q?CNFADKaIqOl/Ye5as7OnM/erJcCaRk7AKjmam63vEceHRUx8UrER6YJY7C7p?= =?us-ascii?Q?DL0dCwL3Q25qOU10sKjtwRnZ/sikLgQr+n4eVMqyKCoSE9UVr3HYKNS/2E+j?= =?us-ascii?Q?ieZmWg+1Wf8ZvHTCLXGEunKiEpuetxLjujsKi/k3iIa5uYQQyMOoy+ETcbzz?= =?us-ascii?Q?DN6nuAknj30FLGoBAtOF12+1i4zMkY7E7K/JRkCiiEsH014rBIXgLU9WyaVA?= =?us-ascii?Q?15C2xnXHpXYlPu4Dv6XG2tLjXFjugIUrK5jj1tB8r7wuqLZ/2XIqvSlf0N4N?= =?us-ascii?Q?ExhP3s9Ed6rruCBUsasUUL3/ilm9ZsHf5+5cg2WjokINaDhoE5fDCd8yaDi8?= =?us-ascii?Q?Dt6d2zUcwmnwrGWM4wwzVrjmBwEmOUc1Ihg+rbeDAPXTCn9doie3SMB/f/zG?= =?us-ascii?Q?V7Hh4Q3gCGbpN3jXLxnW5aTqx3BKD2Fj8cOe6UySZIVJX4qdugCsuKAT/Jyf?= =?us-ascii?Q?vLdXPsd6I6fb88U5lgddigdLo7v7h5+Uv4O8kIQcU6L2ByBRAnGlSxnkG1to?= =?us-ascii?Q?BE+abvqDN4nq3wplMl4OYOuRBbO9DQekgSPUAGnRl1DbMk7INn5XbAuCHz4i?= =?us-ascii?Q?qZMmhAnHnXi9j4wI03qup3Ya4ykH431a2RxLAJQz9oKJX/xP3GHveIe217FF?= =?us-ascii?Q?oYXYQn0Rz86sBML9VRZEHS9qzh9w4/C0KJMMP1Xq3lXVxQXHb0lya+2ByDmb?= =?us-ascii?Q?ajobl9Z4o6dsR8YGxPoHKSahDUdgwybQVm2LF0IoIIH45Xdz9pu25XxOQl4M?= =?us-ascii?Q?O5BsjvTqcc98DMSPT9fXPqsHWvKpnNGsTu53M9bQXvoynxHD6Js6BU7afTJa?= =?us-ascii?Q?1A0J+dpFLUbtElzz+RZ793I84UIVhoyFFvsXeeg9G/m4fCTT6+ikd77dx5na?= =?us-ascii?Q?UUxhokkaD0uHq7b4brhxzEjh44gXhBSKWYH4oZ1F9MivQd3ge3VXGy/CdcsU?= =?us-ascii?Q?NMR8Seew+ZGKqwVRMBP048t8CkmIhy/ZmRzJIJykIY2aVwPbnnUgMuuJ2exH?= =?us-ascii?Q?h5b9h+DYK6+0BectNCHWToeziUBGpt8C4BH2mfmYPfh331sms0JluybkpIQG?= =?us-ascii?Q?eQHn2yilbSg/n+isl+rJKzNvtwr0wdmp9xnhvVk/Nv4FNsAQjT7/r5MVAKHC?= =?us-ascii?Q?c5s9v1ISrp5k3xQDDDniWx6250I/seQO90FfDodeNv58gz0hrH7BohEtRUui?= =?us-ascii?Q?+pvPgTJ+XTXc0GkkHojckXBX/9q6bJzVTMsP9f2EnAX860cjTg=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA1PR17MB5365.namprd17.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(366016)(1800799024); DIR:OUT; SFP:1102 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?htYumcyOFfohNWOg0xecRUlDLDhoDPkbUysgkcOs6cucT8oAldj2J4Kjp7sh?= =?us-ascii?Q?bWhju/JVoLVkLIhJ/cWZMfZwUd4eMmYzaXBDdHNTusXQACc99dojZLOy3hvq?= =?us-ascii?Q?XelwHD+Sd4GQnxmvM7RAyD6bFYg/XMB9YJYExjpAkRNddkdNX4pH464ZwqNA?= =?us-ascii?Q?EjNpJs0olxebDxN5R2eLn8JNIJu2VjQcwjKQGgBe4Ibp1LP9XqfOuWU97xsD?= =?us-ascii?Q?fRSN6gLvdC53r2JtgDE4uyIgvcolvJdDd2mrl0p1pK7fPxO48zTFmiiJgKj2?= =?us-ascii?Q?Zf2F+55KN0KMKcNeXbsu38ecyGWU4LwHJ8KU0xIT4qGN/aTlviPJ3fKbII/4?= =?us-ascii?Q?x3qKX4Sov6mEkWgV9IKEGTXl8RWnPgA84igMc9vUpH63IcqNvEl75B+45Tg7?= =?us-ascii?Q?tD8wTGIB3eaEAWtEZ6xVBCMFsdu3aZ/vtFJmeXyWaOjfYqrED4g3/vKn2HaW?= =?us-ascii?Q?8U1LtT8qximUGW0FvQDZc3sdcX+TnCaqVJgFi8cQ5AWCIBzLxT/ho1hfVW70?= =?us-ascii?Q?mnxA4c257vZR3O9icT1Q2oXgk603PZlGRl7xCupFV2t6ISJZVzfxuDaFkBAU?= =?us-ascii?Q?AcZNXYc0sBKMETamY6eCj9ee3itXkSaF/GcwhPk2O6+BM3RQY9cs69T1ukEa?= =?us-ascii?Q?fHNRmypB3ozukpP355yNkHyJGG2R0Cm7/ORW6wVRMk917tRNZdvf41g4Q+Me?= =?us-ascii?Q?3V3oPPNw/FA01l5jZtX5Q7y6AnqWWumiDkgAmVZCesZ1knyS/NVBHWoc85zU?= =?us-ascii?Q?JpI77Rj4KCHt0N1+hu1PZ6iabFYouJ1vWyfvzcO4lfVxB3vLE77wh/Q8fn2u?= =?us-ascii?Q?T2+0F+IPlIY947GyhvHxa3KbluFyaRr4P3itFwkB5KbJ0L0tYXC4405PdEL1?= =?us-ascii?Q?r5Acg5EsDb8FT5WU+BtrwvtSargiXm0zWSXmJkRt2M70eSoWGQ9HkHpO+vUz?= =?us-ascii?Q?YWRMJebf5lQxub+PFxWk/yFMNl+dMDKjj2bQXlAQJJiDb5GZS/C3Vyq5LjpV?= =?us-ascii?Q?mNjqowa4zGK9kdqhwEULQJXjlnwqzQCHYSIKG5GEITKr54ha0uquaYTVG5rb?= =?us-ascii?Q?eWsH5GF21b4EdBb5OnWP5Ahzc/VdHS2OJmsvgUgS19DEAz6E9vhXe7e8qgCz?= =?us-ascii?Q?eLCefPKYXNE7zF4rMQgSrxQpueOrWQy040nbMFzD2ynp6BFPlTLwCE2wWlpN?= =?us-ascii?Q?zhB2cGML+BE0H/xJlhMmtoYr8F5QGTcNqxYBKp1Epz6OVogHeqwkIY3jSsgD?= =?us-ascii?Q?Z8Ai+ku/x5tswpVjgud5VcSfBgzLe89GZ4N1G7IYP5OblQjB0I9VPv/bTX89?= =?us-ascii?Q?G0JPbvcrEGSp17PJDnPVRhV7lbVKFJAwXQHzK/S7u4oFoYy8fp7Ahex7MAEh?= =?us-ascii?Q?f+OnR7qFCAFshk92GRzR/b+hZUU+GVRpTa9iZSJ7RU/Aey6cSTIyKD2Fi7az?= =?us-ascii?Q?0hCKqXdO6c1TXdTOWHiRAcA4nUPVGgnWKdVoce8lqKd2VvwYAPoYFyvlqbEY?= =?us-ascii?Q?9C2CU79mz1+YY8ecP6QwpN5iW8vXlrICRcTDi4zTTFsVohgHF/qLDd9C2g5K?= =?us-ascii?Q?x7bPsxq+qWd0LIv8rwIa2LRfyw2wU9Exi3BTpUcz?= X-OriginatorOrg: labware.com X-MS-Exchange-CrossTenant-Network-Message-Id: 61687c59-0cb8-4979-936a-08ddb2709ac7 X-MS-Exchange-CrossTenant-AuthSource: SA1PR17MB5365.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2025 16:11:26.0278 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b5db0322-1aa0-4c0a-859c-ad0f96966f4c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: r3v6HnqX2bSsxdjB7IWrcEhETJOy4NwWBWk2PyqKA01WTcj2B7Wup1zAFXdKcOjiLwsUWSQQwgDZ0u8++RHlMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR17MB6292 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: sUoIx8ifyG492eJkDYBIwjfXf0pVLMrZpfCCxtZfL5s_1750695087 X-Mimecast-Originator: labware.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=WINDOWS-1252 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~public-inbox=simark.ca@sourceware.org This commit adds new method add_symbol () to gdb.Block objects. A typical use of it is to add previously instantiated gdb.Symbol object to block when interfacing with JIT compiler. Reviewed-By: Eli Zaretskii --- gdb/doc/python.texi | 5 +++ gdb/python/py-block.c | 52 +++++++++++++++++++++++---- gdb/testsuite/gdb.python/py-block.exp | 20 +++++++++++ 3 files changed, 71 insertions(+), 6 deletions(-) diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 709ef7c9d1a..15f851e5fd0 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -6180,6 +6180,11 @@ The new block's @var{start}--@var{end} range must be= within superblock's range and must not overlap with any block already contained in superblock. @end defun =20 +@defun Block.add_symbol (symbol) +Add @var{symbol} to this block. Both the block and the @var{symbol} must +belong to the same compunit (@pxref{Compunits In Python}). +@end defun + @defun Block.is_valid () Returns @code{True} if the @code{gdb.Block} object is valid, @code{False} if not. A block object can become invalid if the block it diff --git a/gdb/python/py-block.c b/gdb/python/py-block.c index 43b15b6013e..7926808d4db 100644 --- a/gdb/python/py-block.c +++ b/gdb/python/py-block.c @@ -263,6 +263,43 @@ blpy_is_static (PyObject *self, void *closure) Py_RETURN_FALSE; } =20 +/* Implementation of gdb.Block.add_symbol (self, symbol). + Adds SYMBOL to this block. */ + +static PyObject * +blpy_add_symbol (PyObject *self, PyObject *symbol_obj) +{ + const struct block *block; + + BLPY_REQUIRE_VALID (self, block); + + struct symbol *symbol =3D symbol_object_to_symbol (symbol_obj); + if (symbol =3D=3D nullptr) + { + return PyErr_Format (PyExc_TypeError, +=09=09=09 _("The symbol argument is not valid gdb.Symbol")); + } + + if (symbol->symtab ()->compunit() !=3D block->global_block ()->compunit = ()) + { + return PyErr_Format (PyExc_TypeError, +=09=09=09 _("The symbol argument belongs to different " +=09=09=09 "compunit than block")); + } + + multidictionary *dict =3D block->multidict (); + if (dict =3D=3D nullptr) + { + auto_obstack *obstack =3D +=09&(block->global_block ()->compunit ()->objfile ()->objfile_obstack); + dict =3D mdict_create_linear (obstack, nullptr); + const_cast(block)->set_multidict (dict); + } + + mdict_add_symbol (dict, symbol); + Py_RETURN_NONE; +} + /* Given a string, returns the gdb.Symbol representing that symbol in this block. If such a symbol does not exist, returns NULL with a Python exception. */ @@ -360,7 +397,7 @@ blpy_init (PyObject *zelf, PyObject *args, PyObject *kw= ) return -1; } =20 - static const char *keywords[] =3D { "superblock", "start", "end", NULL }= ; + static const char *keywords[] =3D { "superblock", "start", "end", nullpt= r }; PyObject *superblock_obj; uint64_t start; uint64_t end; @@ -400,9 +437,9 @@ blpy_init (PyObject *zelf, PyObject *args, PyObject *kw= ) =20 /* Check that start-end range does not overlap with any "sibling" blocks' range. */ - auto cu =3D superblock->global_block ()->compunit (); + compunit_symtab *cu =3D superblock->global_block ()->compunit (); =20 - for (auto each : cu->blockvector ()->blocks ()) + for (const struct block *each : cu->blockvector ()->blocks ()) { if (each->superblock () =3D=3D superblock) =09{ @@ -417,11 +454,11 @@ blpy_init (PyObject *zelf, PyObject *args, PyObject *= kw) =09} } =20 - auto obstack =3D &(cu->objfile ()->objfile_obstack); - auto blk =3D new (obstack) block (); + auto_obstack *obstack =3D &(cu->objfile ()->objfile_obstack); + struct block *blk =3D new (obstack) block (); =20 blk->set_superblock (superblock); - blk->set_multidict (mdict_create_linear (obstack, NULL)); + blk->set_multidict (mdict_create_linear (obstack, nullptr)); blk->set_start ((CORE_ADDR) start); blk->set_end ((CORE_ADDR) end); =20 @@ -653,6 +690,9 @@ static PyMethodDef block_object_methods[] =3D { { "is_valid", blpy_is_valid, METH_NOARGS, "is_valid () -> Boolean.\n\ Return true if this block is valid, false if not." }, + { "add_symbol", blpy_add_symbol, METH_O, + "add_symbol (symbol) -> None.\n\ +Add given symbol to the block." }, {NULL} /* Sentinel */ }; =20 diff --git a/gdb/testsuite/gdb.python/py-block.exp b/gdb/testsuite/gdb.pyth= on/py-block.exp index afa306be00f..b1cb93ca718 100644 --- a/gdb/testsuite/gdb.python/py-block.exp +++ b/gdb/testsuite/gdb.python/py-block.exp @@ -138,6 +138,26 @@ gdb_test "python print ( gdb.Block(cu.static_block(), = 160, 170))" \ =09 " \{.*\}>" \ =09 "Create sibling block" =20 +# Test adding symbols to a block. +gdb_py_test_silent_cmd "python symtab =3D gdb.Symtab(\"some_file.txt\", cu= )" \ +=09=09 "Create new symtab" 1 +gdb_py_test_silent_cmd "python typ =3D gdb.selected_inferior().architectur= e().integer_type(0).function()" \ +=09=09 "Create type of new symbol" 1 +gdb_py_test_silent_cmd "python sym =3D gdb.Symbol(\"static_block\", symtab= , typ, gdb.SYMBOL_FUNCTION_DOMAIN, gdb.SYMBOL_LOC_BLOCK, cu.static_block() = )" \ +=09=09 "Create new symbol" 1 +gdb_test "python print ( sym in list(cu.global_block()) )" \ +=09 "False" \ +=09 "Symbol is not in global block" +gdb_py_test_silent_cmd "python cu.global_block().add_symbol(sym)" \ +=09=09 "Add new symbol to block" 1 +gdb_test "python print ( sym in list(cu.global_block()) )" \ +=09=09 "True" \ +=09=09 "Symbol is in global block" +gdb_test "python print ( cu.global_block().add_symbol(cu))" \ +=09 "TypeError.*:.*" \ +=09 "Add non-symbol to block" + + # Test Block is_valid. This must always be the last test in this # testcase as it unloads the object file. delete_breakpoints --=20 2.47.2