From patchwork Wed Mar 19 21:22:05 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Vrany X-Patchwork-Id: 108569 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 191163857BBA for ; Wed, 19 Mar 2025 21:24:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 191163857BBA X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org 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 56CE63857C5F for ; Wed, 19 Mar 2025 21:22:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 56CE63857C5F 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 56CE63857C5F 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=1742419361; cv=none; b=qAq7QDMyQXpboXglSqT+QRFXekHRAvQGKxYbPmArG2kuzNoXQjEQuWVkVaeVwAw0jjWdTdwDBhYPXqHv9hqLcmERbXlU0C+BkHrzEbQja1Mqnb2gmzx0gLWB/E60mErNHroX7lkufsSRimGpE965rCK7v6TYTwcfcM2LzuZwbKY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1742419361; c=relaxed/simple; bh=Sxr30B48qKG5ijFLVr2wFcxILbq5XJCNv2kXdZni7Vk=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=JoNJfFPGITLt+R/mZZ6GgvuynACtaxKYFDdbqkylkWAkFfRhytvGeKVFCnfQvzrbo7h2ytmFuRYFBlSmuL3qBSrtjfOng5YB4Nzzmtg5kTRxkVzRNkKgtWsHF2QeRIw/xfzbxyOnfcshx8HuwVH2uissQFN3OFbL3M/vBuNHcI8= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 56CE63857C5F Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2048.outbound.protection.outlook.com [104.47.73.48]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-120-_N6cwXsLOr6YGoKpQYrHBQ-1; Wed, 19 Mar 2025 17:22:40 -0400 X-MC-Unique: _N6cwXsLOr6YGoKpQYrHBQ-1 X-Mimecast-MFC-AGG-ID: _N6cwXsLOr6YGoKpQYrHBQ_1742419359 Received: from SA0PR17MB4314.namprd17.prod.outlook.com (2603:10b6:806:e7::16) by IA1PR17MB6694.namprd17.prod.outlook.com (2603:10b6:208:3da::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.33; Wed, 19 Mar 2025 21:22:38 +0000 Received: from SA0PR17MB4314.namprd17.prod.outlook.com ([fe80::38a7:a6f2:3b95:bc26]) by SA0PR17MB4314.namprd17.prod.outlook.com ([fe80::38a7:a6f2:3b95:bc26%7]) with mapi id 15.20.8534.031; Wed, 19 Mar 2025 21:22:38 +0000 From: Jan Vrany To: gdb-patches@sourceware.org CC: Jan Vrany , Tom Tromey Subject: [pushed] gdb/python: do not hold on gdb.Symtab object from gdb.Symtab_and_line Date: Wed, 19 Mar 2025 21:22:05 +0000 Message-ID: <20250319212212.490510-3-jan.vrany@labware.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250319212212.490510-1-jan.vrany@labware.com> References: <20250319212212.490510-1-jan.vrany@labware.com> X-ClientProxiedBy: LO4P123CA0280.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:195::15) To SA0PR17MB4314.namprd17.prod.outlook.com (2603:10b6:806:e7::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SA0PR17MB4314:EE_|IA1PR17MB6694:EE_ X-MS-Office365-Filtering-Correlation-Id: fb7d7ba7-8b4d-4c18-82f0-08dd672c2cb7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014 X-Microsoft-Antispam-Message-Info: KDKUtTScmNMqKhs4yyAT1Qi18IFfJYH+EyqIDMGbR04410q/cdWfodo3BoV3QsZf3UQTAEFRJMnUsQxGV4mfvSQCLGH4ElVPNG1c4CMnTGWdOnzluoamR6e+/VpWedzi/B92zeaLaX5TIRHqh4CV17AubAXDYX6TMtzWnKaAp3DLNBRX9KfMMMVCnrkIlr9Svrrz5aKE60LDk2le+P1dIm8XggXMhEKtTNZa+QSpiSevUYnNwJE9X11zuUxXvg+qBMbZd14tg1l13qRHQRSY0ysELjDyQW6sXKh0m+kxUOH0iEy2gfS1XBZ2P8NlS7QqqSHounFwmBcpltzn+RchIOHeb5SH7NiP7h0UPPrVnxSawMFFzavaEaMLAHLMkiifBMBmMzpxrq3QbsvasMLtSmgQAD4y8OtP+tO3Kc/8FC7smY78nuwkNpreaeyTNPD4PjZDBMuwEuD7xv1/SwnW98c7VsbIpRRiwGR8sgvrB6DymC/4iJp5z8iYF6tS7TwvL6QerRWt2YHQ4jDU78zvB13z2DER+PZTPlaEWgVPC85o5i5rgl6riSAvP4+d/Cgh0K2QjbusGKkGaXE3qkn2R/CHbqDytX3YUZnKo9Eu3/CJ3mfC1k/fOfmVM9a9E0vvhGA5TVdiznjzqnZf96MDdujH7Qazj7d4lDFAuERwmf+6yj9Rd3FhKiHAkKJocFfBxhatKQLIk8EYWjVaUj4EfL7bq/gINgjIWvuoa4dKkzSuFgYD+S6nP/o1SoAjIbocGFjxvqYtwrb6zf3mnTYdsaOoVweW2Zj8MyOSiX+f4/aUaqiq0QcLd7jyzm6gd88PFF+BEvkQ6jqJlxUqm1NcWAQOQA93fRnM13oqYCRQ88eP76OpqyHq7nMwODj02BuH1sAgDRp1Fn3IhmOq9BDhwWexWkv2IxAae3yryvZPEKsAL53PYr52GGNi3FsKbKWONvvtoZ07snWA8QOMl2Tzc58w5h9LVk0fRm3iGNNHgsLw+qicxkKuwBnpxN/o3hb3uRnzqvuxnozuAIGnVJnIkOXTo8daoEQRyv8Xa6IEbpYPEAkzU6Uy02JXYysV5FnziZjpnuTO5/1/taFjBSZKB7UqYIXcxIuiKFPQpOzJC/6HvfsfwfYTC1+txviHBbXOQr8Y28Mq6cunWsW02dfuWYUPbLJzGkWe3AvmFOsl+LYfwy6NrOhdWKfkegGiZ3nBbiTdptBmyC0BWxIveLylkVyFDAcSxyprha1+g2ICNdaIM8xBkZKteWrYiGKAG1IhEj95aFW2S4/jB0cftNa9w9mOMuxOanNNZIrtTxtLdjPG29rb82QOXXtW1Dxr3k8aRYY34fTlXtO3Gf4rL4MmOuf9hGuDgvGLeNfjUXSx6iXTMTJFnuLJap1zS1qGvARp 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)(366016)(1800799024)(376014); DIR:OUT; SFP:1102 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: f9K3Msk11fEJHMtHgwRmWZRyNBxGLou1icxyQR/YGqH61zUhaa+AsuNuxD4dYDtIjbk0LcVzxvSswOho00sOsC7M/O8nrwXGwq1oPzM5YET43sGR8PMzqoZAVDi/AMeNOMUIDLvO7y35/Pb7YBNqfHea6rSe7jgAZbJaVGbuHBzF9FO9J1ayTonhW0s1icme9Petu1mDZSL6ay6sggTyT1Tox9ii3WLJHmWUwgmbr7F0g1BVj5IMJyflB1uRqKGuqaRtE80fzwkDbJNNPnh/lDFGflK/IR+ELsGMurPN7pRAfb671gskGAIID362nQXkhlW6hHNlm5lGwzP0+NOYSXLBWzXTQQlhQUmhYb0MZq496nZur7sTrA9yI0/himLYzzpQE+JAvVUa4O9JmySPN6oWjF9j2Oj5jI4LKZ30/Me36RB7svKmbmGPggMRJJh+6HWVGc71L+SAum1A+jzsY6i2+P0cJ7pnjGJmAcWBmsWJYY1qR8sUeSLbTcKlWC6bNq04H8bw/HCqC3J3yFgIkFfNEcve2P65M8Uzq8dsxxLhuGWjLXGVwVjycEM8FYjsWvz1qAJSrHeSJdjD0+Nj9o/jK0w9dJazvIBE+NCXhBtahvLH63UjxaVXeDxpotjz7uhIOL++Q5sygngEYuxlMEfXwUAg1uE300X7UCxDuD853EVuuU4l7OQNhy+D2Ploq3p6PuKNAGSxUY/1UXxGCLDKS5f5wcEAyj6XiAPjIfUgMkndCpZE264IZq61OK9d3ozowyCVvyH4tl1VGzBlJMX6OkInIbDLEKl55DSK/vwnQqevFKFHhqa0yPdPM5H69RaICGGy1oX2I6NjSyGBRPslpKZ5eRhWobf9fHb7Mab3kCuCIWUbJtWvHwRwfFdBUQKcGroJ9IqybdYVnKutj3zfgZU/dUAAsPmnPKz/seYNpUsRl7/mH/4wkqo3VBEQdaj5abuJrYDdYCKi7herp0WC7nGHvty8bm6P4bCGvJ6y28pHs+smX+iSd3Wv7GfuPVI6tbDoi2IrMiJLdQs3+MNLzwVaK/k7PaJcnnjr1TGp5j+Ds/5JpEZcJl0PcEu/rx/+rmUe3+16ez9XWVV/giaV+RX+di25q1Q/2I0Oxw7FmNhXrArII5a2dbuHdyKBOO4TWZvoTdyEIZstHT1dMgXMsCB3mGTZ7zEFiRVHlVyVKWDYDYAhLa/3mhmXNgAOkYvj0AzXg336wErY9sNIc94hT19AQjxDoBnl4+hVXurTQQht+QtFfUWN49KP0s7ckBv8DaPvmGCbc838c5NoXzz0JQ2j8XkgwOlWqDey3prdN/npvfXEgPtoTcgvxA5h4jxNRsthkmP/TWYP1l2lQUd5zZs8MOflfo1bLwhEOSEmfO05pFsIMtjDWmu+pEIWDluMWxKxyrdGCkHorIf4p1oennHyUw1B6VOQHo8lM7H3vB7TLtdhDI+qlEHqzr62eBmfsteM3++qT5IfMnFFalFJ2MgI7zwlX6+Bl0BjmNO6RakewWyvcUUQXq/V9/t2tqqf56agkV4mcDlKmV/pdZDZN+Kee4iHEE1z4ay5NY62LjaicBvUtI+ZSzvK9Emd X-OriginatorOrg: labware.com X-MS-Exchange-CrossTenant-Network-Message-Id: fb7d7ba7-8b4d-4c18-82f0-08dd672c2cb7 X-MS-Exchange-CrossTenant-AuthSource: SA0PR17MB4314.namprd17.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Mar 2025 21:22:38.4117 (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: NZAjIqgueYSxvKC3LWQ+AQjIxwGsQNhb1oKdwxC6D+ABctB37yaoXrXY3E/HuOBdJ3FqYNgmIuNBoNFrWBtkaw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR17MB6694 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 0oChfl4nvyibj2m36yjfn-UjKt1oFxL4KioJjNYPfmw_1742419359 X-Mimecast-Originator: labware.com X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, 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 Previous commit changed symtab_to_symtab_object() so each time it is called with particula struct symtab* it returns the same object. Therefore there's no longer need to hold on symtab object (gdb.Symtab) from struct sal_object in order to preserve identity of Symtab object held in gdb.Symtab_and_line.symtab property. This in turn allowed for some simplification in various functions. While at it I changed a couple of NULLs to nullptrs. Approved-By: Tom Tromey --- gdb/python/py-symbol.c | 2 +- gdb/python/py-symtab.c | 73 ++++++++++++------------------------------ 2 files changed, 22 insertions(+), 53 deletions(-) diff --git a/gdb/python/py-symbol.c b/gdb/python/py-symbol.c index d6baf8d7ae5..4839d5ab4dd 100644 --- a/gdb/python/py-symbol.c +++ b/gdb/python/py-symbol.c @@ -381,7 +381,7 @@ symbol_to_symbol_object (struct symbol *sym) { symbol_object *sym_obj; - /* Look if there's already a gdb.Symtab object for given SYMTAB + /* Look if there's already a gdb.Symbol object for given SYMBOL and if so, return it. */ if (sym->is_objfile_owned ()) sym_obj = sympy_objfile_data_key.get (sym->objfile ()); diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index 7b51e211daf..177028ecf01 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -77,8 +77,6 @@ static const registry::key struct sal_object { PyObject_HEAD - /* The GDB Symbol table structure. */ - PyObject *symtab; /* The GDB Symbol table and line structure. */ struct symtab_and_line *sal; /* A Symtab and line object is associated with an objfile, so keep @@ -104,14 +102,10 @@ struct salpy_deleter { sal_object *next = obj->next; - gdbpy_ref<> tmp (obj->symtab); - obj->symtab = Py_None; - Py_INCREF (Py_None); - - obj->next = NULL; - obj->prev = NULL; + obj->next = nullptr; + obj->prev = nullptr; xfree (obj->sal); - obj->sal = NULL; + obj->sal = nullptr; obj = next; } @@ -272,18 +266,15 @@ salpy_str (PyObject *self) { const char *filename; sal_object *sal_obj; - struct symtab_and_line *sal = NULL; + struct symtab_and_line *sal = nullptr; SALPY_REQUIRE_VALID (self, sal); sal_obj = (sal_object *) self; - if (sal_obj->symtab == Py_None) + if (sal_obj->sal->symtab == nullptr) filename = ""; else - { - symtab *symtab = symtab_object_to_symtab (sal_obj->symtab); - filename = symtab_to_filename_for_display (symtab); - } + filename = symtab_to_filename_for_display (sal_obj->sal->symtab); return PyUnicode_FromFormat ("symbol and line for %s, line %d", filename, sal->line); @@ -346,13 +337,13 @@ static PyObject * salpy_get_symtab (PyObject *self, void *closure) { struct symtab_and_line *sal; - sal_object *self_sal = (sal_object *) self; SALPY_REQUIRE_VALID (self, sal); - Py_INCREF (self_sal->symtab); - - return (PyObject *) self_sal->symtab; + if (sal->symtab == nullptr) + Py_RETURN_NONE; + else + return symtab_to_symtab_object (sal->symtab); } /* Implementation of gdb.Symtab_and_line.is_valid (self) -> Boolean. @@ -377,15 +368,14 @@ salpy_dealloc (PyObject *self) if (self_sal->prev) self_sal->prev->next = self_sal->next; - else if (self_sal->symtab != Py_None) + else if (self_sal->sal != nullptr && self_sal->sal->symtab != nullptr) salpy_objfile_data_key.set - (symtab_object_to_symtab (self_sal->symtab)->compunit ()->objfile (), + (self_sal->sal->symtab->compunit ()->objfile (), self_sal->next); if (self_sal->next) self_sal->next->prev = self_sal->prev; - Py_DECREF (self_sal->symtab); xfree (self_sal->sal); Py_TYPE (self)->tp_free (self); } @@ -395,37 +385,19 @@ salpy_dealloc (PyObject *self) Also, register the sal_object life-cycle with the life-cycle of the object file associated with this sal, if needed. If a failure occurs during the sal population, this function will return -1. */ -static int CPYCHECKER_NEGATIVE_RESULT_SETS_EXCEPTION +static void set_sal (sal_object *sal_obj, struct symtab_and_line sal) { - PyObject *symtab_obj; - - if (sal.symtab) - { - symtab_obj = symtab_to_symtab_object (sal.symtab); - /* If a symtab existed in the sal, but it cannot be duplicated, - we exit. */ - if (symtab_obj == NULL) - return -1; - } - else - { - symtab_obj = Py_None; - Py_INCREF (Py_None); - } - sal_obj->sal = ((struct symtab_and_line *) xmemdup (&sal, sizeof (struct symtab_and_line), sizeof (struct symtab_and_line))); - sal_obj->symtab = symtab_obj; sal_obj->prev = NULL; /* If the SAL does not have a symtab, we do not add it to the objfile cleanup observer linked list. */ - if (sal_obj->symtab != Py_None) + symtab *symtab = sal_obj->sal->symtab; + if (symtab != nullptr) { - symtab *symtab = symtab_object_to_symtab (sal_obj->symtab); - sal_obj->next = salpy_objfile_data_key.get (symtab->compunit ()->objfile ()); if (sal_obj->next) @@ -435,8 +407,6 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal) } else sal_obj->next = NULL; - - return 0; } /* Given a symtab, and a symtab_object that has previously been @@ -495,14 +465,13 @@ symtab_to_symtab_object (struct symtab *symtab) PyObject * symtab_and_line_to_sal_object (struct symtab_and_line sal) { - gdbpy_ref sal_obj (PyObject_New (sal_object, &sal_object_type)); - if (sal_obj != NULL) - { - if (set_sal (sal_obj.get (), sal) < 0) - return NULL; - } + sal_object *sal_obj; + + sal_obj = PyObject_New (sal_object, &sal_object_type); + if (sal_obj != nullptr) + set_sal (sal_obj, sal); - return (PyObject *) sal_obj.release (); + return (PyObject *) sal_obj; } /* Return struct symtab_and_line reference that is wrapped by this