From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id uH1pFVJ9WWhu1xoAWB0awg (envelope-from ) for ; Mon, 23 Jun 2025 12:14:10 -0400 Received: by simark.ca (Postfix, from userid 112) id 50FA11E11C; Mon, 23 Jun 2025 12:14:10 -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 7F5461E0C2 for ; Mon, 23 Jun 2025 12:14:08 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 2C383386B89A for ; Mon, 23 Jun 2025 16:14:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2C383386B89A Received: from us-smtp-delivery-114.mimecast.com (us-smtp-delivery-114.mimecast.com [170.10.129.114]) by sourceware.org (Postfix) with ESMTP id E8A263846721 for ; Mon, 23 Jun 2025 16:11:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E8A263846721 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 E8A263846721 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.114 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1750695099; cv=none; b=JoODK7+IEMPvYU4oAiDdh7PJlGRpLvrmezBVqCoraRxTpEsMVEoAxUuFj5WgjHdSWDjE/KrG5IGJPbT9sZvkNr8YTZhjM/4qYS+8rJ2ztmAVGWm8587a0yjDEIHcsPWOqq+MNpjO6ScorZ7X5e57zi17ReleCRHw7RPHonCC158= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1750695099; c=relaxed/simple; bh=OtN6rkexESfQWtqKfuVbSDj9BfZwZuOdbTTJpHdTNK0=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=PpnGeLJWvqtgB9orcA6nrhSrbieP20kjouBAJeUPf1q/TvFTlGHTLJ4NRfuFodrN17ovpspaWZ0zlEjzAZspaak/N8oUf2qYG3X4qLODy8XzqVb3p2nnGQK0BAiISQLpChwJiZpjDP37VDDWlukhDqHiQ8XM2e+7ejSLGZdhC4k= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E8A263846721 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2108.outbound.protection.outlook.com [40.107.94.108]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-155-3Ys4ZwKXMy6SgQxM_kUgNg-1; Mon, 23 Jun 2025 12:11:36 -0400 X-MC-Unique: 3Ys4ZwKXMy6SgQxM_kUgNg-1 X-Mimecast-MFC-AGG-ID: 3Ys4ZwKXMy6SgQxM_kUgNg_1750695095 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:34 +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:34 +0000 From: Jan Vrany To: gdb-patches@sourceware.org CC: Jan Vrany , Eli Zaretskii Subject: [RFC v5 16/18] gdb/python: allow instantiation of gdb.LineTableEntry objects Date: Mon, 23 Jun 2025 17:10:11 +0100 Message-ID: <20250623161013.650814-17-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: LO4P265CA0112.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:2c3::15) 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: 2adbf538-b92c-443f-9e3b-08ddb2709f92 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?MBz3HW8f7/Sng8UJNocCxE70Wo0IqwQIZr+qHl66ZXrWurZ+9sx/2Q7YdJq1?= =?us-ascii?Q?ZsPNMX6eCNkALwal/p2rxD3jw0HkTNQdEhdXuj9Qw/Z6erb5PTaURIWtYKbg?= =?us-ascii?Q?B4pecausn4Dct7p8zhR3pcaRZc0S4887Y4+1vJ+cgiz6gQrzjmfLHldA96y5?= =?us-ascii?Q?k0OB10jctkO0zLXMGAcQZmsJd4qThBslFj8Rr5C7DPCcMkRSoUBn7GZVWXhA?= =?us-ascii?Q?WMKy5AOSAsGFXjxy+4fPwGb9rrQG69LHXScyaVImyEgYNu1Gfxgllr5HuF1x?= =?us-ascii?Q?CRIIAUPw4W4FKM8JlfSBI1CKHFmIqjAtOVyL0I5YH9R2JdJZiT001jZH4UhS?= =?us-ascii?Q?EppguEtmLJVZyIQ5jfKkh30XlZhvoXNI+JR5OkzHbBHfsfU4CftsyB3RgFiG?= =?us-ascii?Q?r1JSieC2b/43RM/BRnM6pVVGSAzYeEpNZEw2GHzsRNp4bBioUWIxnqMTMyKg?= =?us-ascii?Q?id/MKPRhrDbCKPrEV7KOGGuq/Qm/t/2rzzc3K6VXitxpTUvJcyCmhkMSbwzi?= =?us-ascii?Q?OsHeSPjQ7ticBSikBNS7T+1GBHPbwBFi8LokYyzebLrUqRokDrfGAwYV0QzN?= =?us-ascii?Q?qhmpSMtASxISwxF5NwiGAGLrtJIjQTvF1J5k0TzneINsyalEVkE2sIaWOcuc?= =?us-ascii?Q?YLmmvPOYzpaXYhKS0f26MKvFXMRuXMs0rALNG7E20/7/wlo1yUbb2NwDX3mb?= =?us-ascii?Q?WS6WHySFRCpZogEpO/owXY/fLPlEHc5ueBLllP5UyzDlG47thtaRKtB1xdSU?= =?us-ascii?Q?pU5LTMEYFS5rfHOwO6rJrucWoZ5o/KRRTh/qB4KNEMnzi5pkrzbMM9WSPWWB?= =?us-ascii?Q?mvDliJkxBTxFh2XAiA8tKthrLy6EpYR644bHcOcMZcN5kh/BQbjlBudtmIOS?= =?us-ascii?Q?v2Itv3WnYh4txU3W9KNvej96iZmzytr2hseuUGB70C/85o1TYORMRgoRyIXs?= =?us-ascii?Q?m58VWqh0q3GAS7FKpcr2zmXBtqSB0df4V0+iePj69l/4YZ+zINhITBZ1KKXi?= =?us-ascii?Q?yBE2onk1Wvw4bnjXZ3rJcBOvRpnKFcFKLl1FdKDRydeU5QkCQAPDdAzCS8Qe?= =?us-ascii?Q?L7I2l1krSti0Blxp/aD/F9frjA7415SRxviayT2zERTWHifR4MXSx/hjhqRr?= =?us-ascii?Q?3dRpbhj9sB8Dpa1kwVoOqXlbQxRVXpi8mL9v/nSIHeqzdOEcdlrrIEgsBpDu?= =?us-ascii?Q?ztn2gmBRQQb9ZO1hfNACB1nRVqDtj4b9RfuwhsChCyF12UD8i7kQa7frHbpN?= =?us-ascii?Q?a8oT++JaN6KOrywTH+wnDQ9JgCWjoKjy8oUAJzSH8Ww+pGBYaNsWWDIofMZL?= =?us-ascii?Q?EMd5aU+ER+ztSvUamumg5A8I3rwF93iQFtyZwiJUJ6ukmBRJvADbFVgFr4nw?= =?us-ascii?Q?n+/9er6nPHaJUqvhrwCU39zWZE9+xR4odWEe5JZNNsMCpFdpHybSifDLhE4P?= =?us-ascii?Q?NLOx7tKZP20=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?024OHzy6WCXZ9aVCHEHHTil7niFneqcB8pFzMygmYX5S1vvKLsAKkuTuLXvw?= =?us-ascii?Q?fZnUfMNg4sC6+HlLbBpfzQ55+dnULrmzcVI9UZhFvIWZbRjGlKW/LfDDZlt9?= =?us-ascii?Q?mqsTaZoYwrGRd61qkRR3eQiISFyMyyIH+oCwWgzmGOsZtLJsBPY8SDUSZ2JJ?= =?us-ascii?Q?VLYhB9c+RMCnK7gY37v0ccDuhHYKEgX/yjE1wNYOm6L9llTLAuy66EcZcCpA?= =?us-ascii?Q?bTdERH/geKMq2AxSSBZjUnqulnIaT/+/AkvpGb/D5+tStiLjkIPW2Diak3CL?= =?us-ascii?Q?wtsfHbaL81ZO7LcQ3R+/8lOJIe6bOUP+iMmuO3DR31M5rC8UfHqvZ30T72yB?= =?us-ascii?Q?dUD8OZkDcMPxNOwfRX8nk6KJJjN4QxcxVLH63K5TLTMWrXTtQWD1Bw+xWnG1?= =?us-ascii?Q?O2Ohscpc3D19szw3EMtucNbvmdiHpP0y/6wE6pdm4ndwdHZu7KBew2yW2qIh?= =?us-ascii?Q?41hHb3BUXVrT+PRT8lZ3aFrwvgL+5knSurI1OB3hSukk2u5OvoFPkpbgtxqb?= =?us-ascii?Q?Z6abtW1h8uQBAc0tO6rcJX7MmgSyQqoBFMPwm2cBHXfLWI9tARO/45mAWHpo?= =?us-ascii?Q?jTJqMXk6jJxEClNG9awaQPq1dXj+76ywCZ+a1HxW+drsKHHvRFDCmJOjjKmX?= =?us-ascii?Q?yDlIsz+nKKQV5G70VdXJjFEEWFeeUFLzkTRzUfU0o5kDzVK14GhX49rX632p?= =?us-ascii?Q?eGk1vMA/tUZMPD0ricumxoSEIf6TfB94z5ONTf1iWa9GFan0smKydvUTjvdA?= =?us-ascii?Q?ohziT9BxxUFHV0ErM2Hc9/yvaG8EhVJQDS8txQj/ao2BhlI2OtDDGelDVSVg?= =?us-ascii?Q?/qRU1rM6ULNrlvMs6hGHtH69ca68hoz4T9CL4WNd2rni3maVGEAOU9K1by8E?= =?us-ascii?Q?xGkSVGaho7zA2uiCXQBUJdyoI1RUmfvhHbfWwtTqrMOGxMH/NbQJJM5TWct3?= =?us-ascii?Q?qW1CEfILALvE2FPySEWhpe1M3m3m8ZKQ4Huq/ZZ0GRW0jVvRlwQZSFJVklxs?= =?us-ascii?Q?RIWu5+4CqO5BnhDQN5a7WGuDsZt0IURLwxuGbkHDn5ZlxITli+k4fp8YJDbG?= =?us-ascii?Q?PNy2ZvYJB7fHQTSSRsmldG8G0mc/9g3x3AfnE+Ha4AbLGB3dZq2M4+DRkw3g?= =?us-ascii?Q?81gX8e3zhYsIxfthrNkdJArD0sj6yoSzKRqd6giTsyUMx79JxNWJXF0LUNIa?= =?us-ascii?Q?K05UpUqVhHcDQyusTmTCgD6+PfhEgWXaIu82PP1WOF/B71uxRJ5RWRTm3r3e?= =?us-ascii?Q?Ews9z6rgpoScZ73Fw37zL1PIBs1b6D054RnnX/Y68A4RL+kmLtmNZ4Szjevc?= =?us-ascii?Q?7K+B22ZOMDd4Bv4Q8IuaFHhLYVlcZ8rKmFsrQVdDKxbBjktpBIbKvqcSp9EC?= =?us-ascii?Q?kysg/2uEsF2hOPvYj4bU2HkYvLDMlNWDf/rTKNPfuWocKXj7qm0VJhzg8ONY?= =?us-ascii?Q?G+ichv9WytM6LV8subus4imU8KNOuqIaDFd4COo22zoUGO6wva2O22oTQIHm?= =?us-ascii?Q?SJmyX+OQ3PX7EukV5SeKifz+QFYP4WJG9o75nrFccK0Yi+K8QB7qXEgxmrhH?= =?us-ascii?Q?eKZdjogv0sdinACH+BhmVMH/pZVFW1MKezzBA8A4?= X-OriginatorOrg: labware.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2adbf538-b92c-443f-9e3b-08ddb2709f92 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:34.0567 (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: D3lgSu2AJtNrMdPjfu8/WHdVITRj8BXFfHbG5D4SwSq9/EJbuch17xe7tOXlBaouXHTxyPDHXLeVfnzXZT7DhQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR17MB6292 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: iofTxryzPcGYopZRIMmq_XQtF-xQGlKvZcJ6qjGlDg4_1750695095 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 Reviewed-By: Eli Zaretskii --- gdb/doc/python.texi | 8 ++++ gdb/python/py-linetable.c | 52 +++++++++++++++++++---- gdb/testsuite/gdb.python/py-linetable.exp | 25 +++++++++++ 3 files changed, 77 insertions(+), 8 deletions(-) diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 7c3a87cdaad..2b33cd32201 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -6839,6 +6839,14 @@ True if pc (associated with this entry) marks the st= art of the epilogue. This attribute is not writable. @end defvar =20 +@code{LineTableEntry} objects have the following methods: + +@defun LineTableEntry.__init__ (line, pc@r{[}, is_stmt@r{][}, prologue_end= @r{][}, epilogue_begin@r{]}) +Create new line table entry. Arguments correspond to @code{LineTableEntry} +attributes described above. Optional arguments @var{is_stmt}, +@var{prologue_end} and @var{epilogue_begin} default to @code{False}. +@end defun + As there can be multiple addresses for a single source line, you may receive multiple @code{LineTableEntry} objects with matching @code{line} attributes, but with different @code{pc} attributes. The diff --git a/gdb/python/py-linetable.c b/gdb/python/py-linetable.c index 5eb40bf3c5b..57d1a74bf78 100644 --- a/gdb/python/py-linetable.c +++ b/gdb/python/py-linetable.c @@ -146,7 +146,7 @@ build_line_table_tuple_from_entries ( =20 for (i =3D 0; i < entries.size (); ++i) { - auto entry =3D entries[i]; + const linetable_entry *entry =3D entries[i]; gdbpy_ref<> obj (build_linetable_entry ( =09=09=09entry->line, entry->pc (objfile), entry->is_stmt, =09=09=09entry->prologue_end, entry->epilogue_begin)); @@ -390,6 +390,41 @@ ltpy_entry_get_epilogue_begin (PyObject *self, void *c= losure) Py_RETURN_FALSE; } =20 +/* Object initializer; creates new linetable entry. + + Use: __init__(LINE, PC, IS_STMT, PROLOGUE_END, EPILOGUE_BEGIN). */ + +static int +ltpy_entry_init (PyObject *zelf, PyObject *args, PyObject *kw) +{ + linetable_entry_object *self =3D (linetable_entry_object *) zelf; + + static const char *keywords[] =3D { "line", "pc", "is_stmt", "prologue_= end", +=09=09=09=09 "epilogue_begin", nullptr }; + int line =3D 0; + CORE_ADDR pc =3D 0; + int is_stmt =3D 0; + int prologue_end =3D 0; + int epilogue_begin =3D 0; + + if (!gdb_PyArg_ParseTupleAndKeywords (args, kw, "iK|ppp", +=09 keywords, +=09 &line, +=09 &pc, +=09 &is_stmt, +=09 &prologue_end, +=09 &epilogue_begin)) + return -1; + + self->line =3D line; + self->pc =3D pc; + self->is_stmt =3D is_stmt =3D=3D 1 ? true : false; + self->prologue_end =3D prologue_end =3D=3D 1 ? true : false; + self->epilogue_begin =3D epilogue_begin =3D=3D 1 ? true : false; + + return 0; +} + /* LineTable iterator functions. */ =20 /* Return a new line table iterator. */ @@ -604,12 +639,12 @@ static gdb_PyGetSetDef linetable_entry_object_getset[= ] =3D { "The line number in the source file.", NULL }, { "pc", ltpy_entry_get_pc, NULL, "The memory address for this line number.", NULL }, - { "is_stmt", ltpy_entry_get_is_stmt, NULL, - "Whether this is a good location to place a breakpoint for associated = LINE.", NULL }, - { "prologue_end", ltpy_entry_get_prologue_end, NULL, - "Whether this is a good location to place a breakpoint after method pr= ologue.", NULL }, - { "epilogue_begin", ltpy_entry_get_epilogue_begin, NULL, - "True if this location marks the start of the epilogue.", NULL }, + { "is_stmt", ltpy_entry_get_is_stmt, nullptr, + "Whether this is a good location to place a breakpoint for associated = LINE.", nullptr }, + { "prologue_end", ltpy_entry_get_prologue_end, nullptr, + "Whether this is a good location to place a breakpoint after method pr= ologue.", nullptr }, + { "epilogue_begin", ltpy_entry_get_epilogue_begin, nullptr, + "True if this location marks the start of the epilogue.", nullptr }, { NULL } /* Sentinel */ }; =20 @@ -650,6 +685,7 @@ PyTypeObject linetable_entry_object_type =3D { 0,=09=09=09=09 /* tp_descr_get */ 0,=09=09=09=09 /* tp_descr_set */ 0,=09=09=09=09 /* tp_dictoffset */ - 0,=09 /* tp_init */ + ltpy_entry_init,=09=09 /* tp_init */ 0,=09=09=09=09 /* tp_alloc */ + PyType_GenericNew,=09=09 /* tp_new */ }; diff --git a/gdb/testsuite/gdb.python/py-linetable.exp b/gdb/testsuite/gdb.= python/py-linetable.exp index 40afd8c400e..cf01a694070 100644 --- a/gdb/testsuite/gdb.python/py-linetable.exp +++ b/gdb/testsuite/gdb.python/py-linetable.exp @@ -81,3 +81,28 @@ gdb_test "python print(lt.has_line(44))" \ gdb_test "python print(lt.has_line(10))" \ "False.*" \ "test has_pcs at line 10" + +# Test gdb.LineTableEntry.__init__ () +gdb_test "python print( gdb.LineTableEntry(10, 0xcafe0000).line)" \ + "10" \ + "test new LineTableEntry line" + +gdb_test "python print( gdb.LineTableEntry(10, 123456).pc)" \ + "123456" \ + "test new LineTableEntry pc" + +gdb_test "python print( gdb.LineTableEntry(10, 123456).is_stmt)" \ + "False" \ + "test new LineTableEntry is_stmt" +gdb_test "python print( gdb.LineTableEntry(10, 123456).prologue_end)" \ + "False" \ + "test new LineTableEntry prologue_end" +gdb_test "python print( gdb.LineTableEntry(10, 123456).epilogue_begin)" \ + "False" \ + "test new LineTableEntry epilogue_begin" +gdb_test "python print( gdb.LineTableEntry('xx', 123456).pc)" \ + "TypeError.*:.*" \ + "test creating invalid gdb.LineTableEntry" +gdb_test "python print( gdb.LineTableEntry(10, 123456, prologue_end =3D Tr= ue).prologue_end)" \ + "True" \ + "test prologue_end keyword argument" --=20 2.47.2