From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id IHIvDIZkl2daIRwAWB0awg (envelope-from ) for ; Mon, 27 Jan 2025 05:48:38 -0500 Received: by simark.ca (Postfix, from userid 112) id 2EBFF1E105; Mon, 27 Jan 2025 05:48:38 -0500 (EST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.0 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 B87811E08E for ; Mon, 27 Jan 2025 05:48:37 -0500 (EST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id E80E5385828E for ; Mon, 27 Jan 2025 10:48:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E80E5385828E 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 DFEB23858435 for ; Mon, 27 Jan 2025 10:46:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DFEB23858435 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 DFEB23858435 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=1737974772; cv=none; b=k/NfNXLcvTp3kEcV7lXT4WOQckTxcG2LLnCA15EYw5rl6IPdCOc51wyeg81bpZscgeZYPz8xRR9TyrwKGeeLSARDe7i+SpR3TuudOliBGQiJ73ZVGx35N5kvJE/7oFEt9u3elwKTarRbmFlwLwPuWZrrTMA3Ypws8Uo3N+jDOPg= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1737974772; c=relaxed/simple; bh=b2UV2Hdqq7ij22Dg2G48cNIUZfN6dLWQSH7y0BTrg3Y=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=aZpAFE1SmoYU26fV0cxS3PFscg2gmIp+eF9UWzBU+fkL75hFfMSzFXxMz8brNFEoWs7DNBOk8UVb7LxN2ebjkF3+SRpThV0n0P8umGP1kztVq26HOgQMxpI/0yom8CvZjQ8XJIGGxqD5EPw4vg0U1nomI1Bh3gTkwIEddmOMXew= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DFEB23858435 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2175.outbound.protection.outlook.com [104.47.55.175]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-484-8Tz-0QENPtGNyPJ3fHgAoQ-1; Mon, 27 Jan 2025 05:46:10 -0500 X-MC-Unique: 8Tz-0QENPtGNyPJ3fHgAoQ-1 X-Mimecast-MFC-AGG-ID: 8Tz-0QENPtGNyPJ3fHgAoQ Received: from SA0PR17MB4314.namprd17.prod.outlook.com (2603:10b6:806:e7::16) by IA1PR17MB6170.namprd17.prod.outlook.com (2603:10b6:208:3a5::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8377.22; Mon, 27 Jan 2025 10:46:07 +0000 Received: from SA0PR17MB4314.namprd17.prod.outlook.com ([fe80::38a7:a6f2:3b95:bc26]) by SA0PR17MB4314.namprd17.prod.outlook.com ([fe80::38a7:a6f2:3b95:bc26%5]) with mapi id 15.20.8377.021; Mon, 27 Jan 2025 10:46:07 +0000 From: Jan Vrany To: gdb-patches@sourceware.org CC: Jan Vrany Subject: [RFC 7/9] gdb/python: convert gdb.Type to use gdbpy_registry Date: Mon, 27 Jan 2025 10:44:33 +0000 Message-ID: <20250127104435.823519-8-jan.vrany@labware.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20250127104435.823519-1-jan.vrany@labware.com> References: <20250127104435.823519-1-jan.vrany@labware.com> X-ClientProxiedBy: LO4P265CA0001.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2ad::14) To SA0PR17MB4314.namprd17.prod.outlook.com (2603:10b6:806:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA0PR17MB4314:EE_|IA1PR17MB6170:EE_ X-MS-Office365-Filtering-Correlation-Id: 6e258782-0057-4a3c-ed71-08dd3ebfcdc1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014 X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?20aGvhcxuQw5FdeCOgCWfbIQOKfwmwgGf+77GdDHUJRljHEDPjQt4xT8+zto?= =?us-ascii?Q?8UxGKY28gni5tKP4zTOL2c8bdjq5vAPwWKlBBfAOQ4YGY6rj+SkD96OOgT7U?= =?us-ascii?Q?uffemFOSae/MT393qb+a31Lc0UhQf21lPx2Kfx/2GB/BBbR9zq1k1rAPrc8B?= =?us-ascii?Q?uQjH6GzRgT6X0HOwMENx0NjY8Fi03VZqv+RijSYFZrBdXBwpc7t6PUyqM9bx?= =?us-ascii?Q?Uocr/AsDEglrWjDFRo35ej9srbEFEHzkOfONHrGYRby7wMZnIc0sUPP248Na?= =?us-ascii?Q?EncjD2MlUhMoG/reyvh0laopIq0kezlTw2Z7DHX8WJJaiyiRICdNQhpB+/0q?= =?us-ascii?Q?jBXiByqwW80o6nUKvUHAAFJZNPehSi50rwPmBUM4+Tw3Vn0h3UDK+zueteth?= =?us-ascii?Q?j27iWgOgnKVmP+45HiI0+9xGphVHPI6LKNKUWQwOy9Wc0+beqs/M3xkQmfTh?= =?us-ascii?Q?5gBoDPF0542Y94qwyyLavRoVveP+i1msFyKY9tTA/mqVghJVUwZ6O0tWZfdZ?= =?us-ascii?Q?5vkY2S9zuo8jMKMsE8fUIe2gbUkSoJSgatMWTP07SgcKAdsV6IZuMWroO1hz?= =?us-ascii?Q?XQtB3lFBx0FfsdscvLCJkQugAXgIHkCbpWaCoUqQCeKk2+TxotP25IiaYnM/?= =?us-ascii?Q?wZJTQVGcstcY2Nv//OBNb46t75CTFjfbQWHFGkLCXzjZnsYcNp1ZdhjWHTFE?= =?us-ascii?Q?a9DUTQXVNE3XOkNEK1Ip8SvWJ+uOjXUTOziPi3HGOCtrx4PLjsilKzcBO0tM?= =?us-ascii?Q?r8ELDwVycR9wHvE/QIuhdFE1Fdcge0FtWeqmyXi0Laut5Bj1zENiO3QTd5Sy?= =?us-ascii?Q?V6A05s4ON9ZcyIVEuX6pyY9VR+Da/IrGpYEHY0r8esxaEk/SbjtYMlsJcurL?= =?us-ascii?Q?nA05nXm6G/Dhc0iy3e+LBMl+n4aML6gnhvcqv1ayHzVpUn9bvCX7G1B7+5sq?= =?us-ascii?Q?S1gAN71e7bJmafzzZi972eZoC/Fp/QP1yHrLDe7sBKELFZgNJm+mWrq/QBnS?= =?us-ascii?Q?Q9YPoHMMOmofPnAvnf9Yyi5eaO0GoBfeWYqn3z6J/VfOmcBI+XyI7I0hUvRW?= =?us-ascii?Q?3D3gDlUWxIAFeLMSxy+h4pqdQ2L0k36nbqIOYsMxEZvjaXM9Re5RnWZL2U7V?= =?us-ascii?Q?MXVUuPZ/4RTYEGpisIOvoFigRiFHeabxWb331Bx/YcKTkOQzAomMGAVeLlTC?= =?us-ascii?Q?KeKDNrnh4k/wyqdVM5NbujNQ8vC2e+UTL4IvBIKt4fu5Qr2JpiJa9V5M58Pu?= =?us-ascii?Q?2rNKDCXAtfZH/Oxh/pWbrep/G8OuaASYKd2mM8bc/pJv9bSGWyds2pt3REY6?= =?us-ascii?Q?pdbrXbsB3V+XKeQlPsw7sFs/wGUPIXUUE/9eXZbRnl8kxqAR/j812q08CEJE?= =?us-ascii?Q?6acx5NKPuO7WDIq/MeU8uwGwuCDR?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SA0PR17MB4314.namprd17.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(376014); DIR:OUT; SFP:1102 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dSb6ufOR9ebLOa5zfnF1akV/NZTecrASYUWCun2N3P1SI0cAHUeRwAZEOmxd?= =?us-ascii?Q?a7eHFirQD5rZ3K8mpY5mz2oYbeXWYD1osqwQWlwCNMUiEcKM5qBac5030dp1?= =?us-ascii?Q?/6spJKgqhofonF27hE0psgCC/0/un1tJ5blEVWr2ZiavQblhUyNYXlsENS9i?= =?us-ascii?Q?mcIs/aKAgAMswn21ivLhL7Ujh6w+YSeZVgaKRTFiEH5O+sHVlqLO6nsjMXh4?= =?us-ascii?Q?bYZSmz/ouQTUT2S8T9RKAcLVXyuFek+cJoz3wQ4Os2u9f/LZ6b00LOzy9iLO?= =?us-ascii?Q?pL0cYNevPP37i5/cPoGk2ePNK9niVoGZDvQ2Bby3rUReZJiHXTIM6r5YAxZs?= =?us-ascii?Q?QVVStf+B66tvPUSpz0K/LWpbiLbfVRcTPJ7yJplDrmRRRxETzByIH8IHZJIt?= =?us-ascii?Q?2jUl2/oIpIn7+s5PHqbMuwpMCtN2ngenrvLo73Fq+4nE8e+heG2EkUQfDw92?= =?us-ascii?Q?Uk5d1agXwDT/FaCGnQ7GFnmVX3YvFuVxmnNCSt6Go/Nz8MBcbc/yheY8ixRC?= =?us-ascii?Q?/UDAP8/NfPNbKlJ1q4AxuzlseORW+dnlq52KQZZXLbD/Dz9EL+6TkEUloxR+?= =?us-ascii?Q?EOqie78zgOquMSVhrvM9A3n92azns0vvNE8s0iDuzPaQmVg+yyjV9aYBhgWE?= =?us-ascii?Q?9DZZLeUo06Pn1qTP+940Vor3+5kUh4Z95/VvklQW1v5udwX+HzIyye2N75l+?= =?us-ascii?Q?+bGUpo9rfhTkbGlyXzJXklz+cyiSTnRJ3dTHxS/6kJHH50wUYMdcurzwi8dd?= =?us-ascii?Q?0/onuqES62YdyVDbx2+JCZ3c+oLZOX2uqrJi4GhXlskYRyI8mXid1rgCUHC4?= =?us-ascii?Q?mvhe23ZyA47LNKA4OOocOgCp2Yk+8GlijPCocpbJeu8ymPwNL7SP345osaRz?= =?us-ascii?Q?2OkSwxxc2sDEqZhyQ2cS5RqDdLb931z/86aE5BiSC+VGQfmF7q8WzIIusvhV?= =?us-ascii?Q?G8XZZP9egmhwrp5l8qigVu1wBUKEp6CcYwAW9Pcwpqgb4AZk3XwCyQ7oGTfo?= =?us-ascii?Q?3tMctm5g5hDg+WHpRCuH7Cb2zUT0VkhCjgY9rL9uDKhXeDWLjffpzY0uZfvp?= =?us-ascii?Q?QDUFsdTUptl1h9ne9wKlfTHN2npx8aGq2BRyuPgqj/Y4VyYWKFM/l2poK/ZV?= =?us-ascii?Q?y6Y0LxNmVYdj9kLmngKR6bUYqyDXkklXXPVgK3q/5jmWolD41gaHs1UeOgtj?= =?us-ascii?Q?t6ywpn/X6YcVQCzHlUT5gfA6zy5CPOqJ765LLUFSrzrw3+rTf3BgXJTYQYZ8?= =?us-ascii?Q?o0dRIO/alxDtvhUtryQpAQjZE9I+OARsksh8IyMCFaPNrza9boxxm1oI64zK?= =?us-ascii?Q?YAnAcRXTX04ZydCeRG+xn04vWodRWfYdEuNBNW2sqy07jKqmVHwy18aXbcz7?= =?us-ascii?Q?0DnloDGBhNuwyexDcBNcK+VZFba1u/dpq02oUrYev/lcGfsl0RkE9XO1tNyH?= =?us-ascii?Q?L6db3an+6W76Es6cWUvdW3KJ76YRI+fLyfQRiXUg0wZKv2N8N3pl2iKXnxYC?= =?us-ascii?Q?9siRWQdFfFeN3+Z+nEs+3iusQyHGr/kc59fHNKxY5ECyzSAsMH6p2HVWzR/3?= =?us-ascii?Q?a2AhIo2ZGcZ0veozir+ToC81wA1ShMPeXggQskqK?= X-OriginatorOrg: labware.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6e258782-0057-4a3c-ed71-08dd3ebfcdc1 X-MS-Exchange-CrossTenant-AuthSource: SA0PR17MB4314.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Jan 2025 10:46:06.9903 (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: IWJAE5DSe5xuD2oVXiPE4IJtukExrwToZh9E7SevhPuE+rbz2XcYgfXzRIg5qx1E26T1NwrjCjS1sjxf6FfeJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR17MB6170 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: iDy8_ZJWU0SOjQ9Sq6lNPQyYug5i9cLJfbhxo1N0R_4_1737974770 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 converts gdb.Type to use gdbpy_registry for lifecycle management. --- gdb/python/py-type.c | 117 ++++++------------------------------------- 1 file changed, 14 insertions(+), 103 deletions(-) diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c index c9fa6a37250..049cdca9a18 100644 --- a/gdb/python/py-type.c +++ b/gdb/python/py-type.c @@ -32,12 +32,6 @@ struct type_object { PyObject_HEAD struct type *type; - - /* If a Type object is associated with an objfile, it is kept on a - doubly-linked list, rooted in the objfile. This lets us copy the - underlying struct type when the objfile is deleted. */ - struct type_object *prev; - struct type_object *next; }; =20 extern PyTypeObject type_object_type @@ -1166,120 +1160,44 @@ typy_richcompare (PyObject *self, PyObject *other,= int op) static void set_type (type_object *obj, struct type *type); =20 -/* Deleter that saves types when an objfile is being destroyed. */ -struct typy_deleter_for_objfile_owned +/* Invalidator that saves types when an objfile is being destroyed. */ +struct typy_invalidator { void operator() (type_object *obj) { - if (!gdb_python_initialized) - return; - - /* This prevents another thread from freeing the objects we're - operating on. */ - gdbpy_enter enter_py; - - copied_types_hash_t copied_types; - - while (obj) + if (obj->type->is_objfile_owned ()) { -=09type_object *next =3D obj->next; - -=09copied_types.clear (); +=09copied_types_hash_t copied_types; =20 =09/* Set a copied (now arch-owned) type. As a side-effect this =09 adds OBJ to per-arch list. We do not need to remove it from =09 per-objfile list since the objfile is going to go completely =09 anyway. */ =09set_type (obj, copy_type_recursive (obj->type, copied_types)); - -=09obj =3D next; } - } -}; - -/* Deleter that is used when an arch is is about to be freed. */ -struct typy_deleter_for_arch_owned -{ - void operator() (type_object *obj) - { - while (obj) + else { -=09type_object *next =3D obj->next; - =09obj->type =3D nullptr; - -=09obj->next =3D nullptr; -=09obj->prev =3D nullptr; - -=09obj =3D next; } } }; =20 - - -static const registry::key - typy_objfile_data_key; -static const registry::key - typy_gdbarch_data_key; +static const gdbpy_registry> + typy_registry; =20 static void set_type (type_object *obj, struct type *type) { obj->type =3D type; - obj->prev =3D nullptr; =20 /* Can it really happen that type is NULL? */ if (type !=3D nullptr) { if (type->objfile_owner () !=3D nullptr) -=09{ -=09 struct objfile *objfile =3D type->objfile_owner (); - -=09 obj->next =3D typy_objfile_data_key.get (objfile); -=09 if (obj->next) -=09 obj->next->prev =3D obj; -=09 typy_objfile_data_key.set (objfile, obj); -=09} +=09typy_registry.add (type->objfile_owner (), obj); else -=09{ -=09 struct gdbarch *arch =3D type->arch_owner (); - -=09 obj->next =3D typy_gdbarch_data_key.get (arch); -=09 if (obj->next) -=09 obj->next->prev =3D obj; -=09 typy_gdbarch_data_key.set (arch, obj); -=09} - } - else - obj->next =3D nullptr; -} - -static void -typy_dealloc (PyObject *obj) -{ - type_object *type =3D (type_object *) obj; - - if (type->prev) - type->prev->next =3D type->next; - else if (type->type !=3D nullptr) - { - if (type->type->is_objfile_owned ()) -=09{ -=09 /* Must reset head of list. */ -=09 struct objfile *objfile =3D type->type->objfile_owner (); -=09 typy_objfile_data_key.set (objfile, type->next); -=09} - else -=09{ -=09 struct gdbarch *arch =3D type->type->arch_owner (); -=09 typy_gdbarch_data_key.set (arch, type->next); -=09} +=09typy_registry.add (type->arch_owner (), obj); } - if (type->next) - type->next->prev =3D type->prev; - - Py_TYPE (type)->tp_free (type); } =20 /* Return number of fields ("length" of the field dictionary). */ @@ -1525,19 +1443,12 @@ type_to_type_object (struct type *type) /* Look if there's already a gdb.Type object for given TYPE and if so, return it. */ if (type->is_objfile_owned ()) - type_obj =3D typy_objfile_data_key.get (type->objfile_owner ()); + type_obj =3D typy_registry.lookup (type->objfile_owner (), type); else - type_obj =3D typy_gdbarch_data_key.get (type->arch_owner ()); + type_obj =3D typy_registry.lookup (type->arch_owner (), type); =20 - while (type_obj !=3D nullptr) - { - if (type_obj->type =3D=3D type) -=09{ -=09 Py_INCREF (type_obj); -=09 return (PyObject*)type_obj; -=09} - type_obj =3D type_obj->next; - } + if (type_obj !=3D nullptr) + return (PyObject*)type_obj; =20 type_obj =3D PyObject_New (type_object, &type_object_type); if (type_obj) @@ -1750,7 +1661,7 @@ PyTypeObject type_object_type =3D "gdb.Type",=09=09=09 /*tp_name*/ sizeof (type_object),=09=09 /*tp_basicsize*/ 0,=09=09=09=09 /*tp_itemsize*/ - typy_dealloc,=09=09=09 /*tp_dealloc*/ + 0,=09=09=09 /*tp_dealloc*/ 0,=09=09=09=09 /*tp_print*/ 0,=09=09=09=09 /*tp_getattr*/ 0,=09=09=09=09 /*tp_setattr*/ --=20 2.45.2